centos 7部署postgresql 12失败时,应依次检查yum源配置、安装postgresql12-server与contrib、执行initdb初始化、启动postgresql-12服务、修改postgres用户密码、配置postgresql.conf和pg_hba.conf启用远程访问、开放firewalld的5432端口。

如果您在CentOS 7系统上尝试部署PostgreSQL数据库,但安装失败或服务无法启动,则可能是由于YUM源冲突、依赖缺失、初始化未执行或权限配置不当所致。以下是解决此问题的步骤:
一、配置官方YUM源并排除系统默认源干扰
避免CentOS Base仓库中过时的PostgreSQL包干扰安装,需先屏蔽其postgresql相关包,并导入PostgreSQL官方仓库。
1、编辑CentOS-Base.repo文件:sudo vi /etc/yum.repos.d/CentOS-Base.repo
2、在[base]和[updates]段落末尾分别添加:exclude=postgresql*
3、下载并安装PostgreSQL官方YUM仓库RPM:sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
4、清理缓存并重建元数据:sudo yum clean all && sudo yum makecache
二、安装PostgreSQL服务器与扩展组件
使用官方源安装指定版本(以PostgreSQL 12为例)可确保功能完整、兼容性良好,并包含contrib工具集。
1、执行安装命令:sudo yum install -y postgresql12-server postgresql12-contrib
2、验证安装结果:rpm -qa | grep postgresql12
3、确认二进制路径存在:ls /usr/pgsql-12/bin/
三、初始化数据库集群
初始化操作将创建数据目录结构、生成基础系统表、设置默认角色及配置模板,是启动服务前的必要步骤。
1、运行初始化脚本:sudo /usr/pgsql-12/bin/postgresql-12-setup initdb
2、检查初始化结果目录:ls -l /var/lib/pgsql/12/data/
3、确认关键文件存在:pg_hba.conf、postgresql.conf、PG_VERSION
四、启动并启用系统服务
通过systemd管理PostgreSQL服务,确保其按需启动、日志归集及进程守护能力正常生效。
1、启动PostgreSQL 12服务:sudo systemctl start postgresql-12
2、设置开机自启:sudo systemctl enable postgresql-12
3、检查服务状态:sudo systemctl status postgresql-12
4、确认监听端口已打开:sudo ss -tlnp | grep 5432
五、修改postgres用户密码
默认postgres系统用户与数据库超级用户同名,初始无密码;为保障安全,必须为其设置强密码并启用密码认证。
1、切换至postgres系统用户:sudo su - postgres
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
2、进入psql交互终端:psql -U postgres -d postgres
3、执行密码修改语句:ALTER USER postgres WITH PASSWORD 'YourStrongPass@2026';
4、退出psql:\q
六、配置远程访问支持
PostgreSQL默认仅监听本地回环地址,需同时修改网络绑定策略与客户端认证规则,方能接受外部连接请求。
1、编辑postgresql.conf文件:sudo vi /var/lib/pgsql/12/data/postgresql.conf
2、定位listen_addresses行(约第59行),将其值改为:listen_addresses = '*'
3、编辑pg_hba.conf文件:sudo vi /var/lib/pgsql/12/data/pg_hba.conf
4、在IPv4 local connections注释下方新增一行:host all all 0.0.0.0/0 md5
5、重启服务使配置生效:sudo systemctl restart postgresql-12
七、开放防火墙端口
若系统启用firewalld,5432端口默认被阻断,必须显式放行,否则远程客户端无法建立TCP连接。
1、检查firewalld当前状态:sudo systemctl is-active firewalld
2、若处于active状态,执行端口放行:sudo firewall-cmd --permanent --add-port=5432/tcp
3、重载防火墙规则:sudo firewall-cmd --reload
4、验证端口是否就绪:sudo firewall-cmd --list-ports | grep 5432
八、源码方式安装(备用方案)
当YUM方式因网络或策略受限不可用时,可采用源码编译安装,完全控制版本、路径与编译选项,适用于定制化部署场景。
1、安装编译依赖:sudo yum groupinstall "Development Tools" -y && sudo yum install readline-devel zlib-devel -y
2、创建专用用户与目录:sudo adduser postgres && sudo mkdir -p /usr/local/pgsql/data && sudo chown postgres:postgres /usr/local/pgsql/data
3、切换用户并解压源码:sudo su - postgres -c "wget https://ftp.postgresql.org/pub/source/v12.16/postgresql-12.16.tar.gz && tar -xzf postgresql-12.16.tar.gz"
4、执行configure与编译安装:cd postgresql-12.16 && ./configure --prefix=/usr/local/pgsql && make && sudo make install
5、初始化数据目录:sudo /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
6、启动数据库实例:sudo /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start










