1. 环境准备与安装方式选择在CentOS 7上部署PostgreSQL 12前我们需要先明确两种安装方式的适用场景。在线安装适合能连接外网的标准环境操作简单快捷而离线安装则是内网隔离环境下的必备技能。我曾在某次金融项目部署时就因不了解离线安装的依赖处理而耽误了一整天时间。系统基础检查是第一步。执行以下命令确认系统版本和架构cat /etc/redhat-release # 确认CentOS 7版本 uname -m # 检查是x86_64还是ARM架构对于在线安装官方推荐的Yum源配置方式如下sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm这个命令会自动配置PGDG仓库包含PostgreSQL 12及其所有组件。我在测试时发现某些地区可能需要配置代理镜像源来加速下载这时可以修改/etc/yum.repos.d/pgdg-redhat-all.repo文件中的baseurl。离线安装则需要提前准备完整的RPM包组包括postgresql12-libspostgresql12postgresql12-serverpostgresql12-contrib特别提醒各包的版本号必须严格一致否则会出现兼容性问题。曾经有同事混合使用12.14和12.15版本的包导致服务无法启动。2. 在线安装全流程详解2.1 Yum源安装与初始化执行安装命令后系统会自动处理依赖关系sudo yum install -y postgresql12-server安装完成后关键文件默认存放在以下路径服务单元文件/usr/lib/systemd/system/postgresql-12.service配置文件目录/var/lib/pgsql/12/data/二进制文件目录/usr/pgsql-12/bin/初始化数据库是容易出错的环节sudo /usr/pgsql-12/bin/postgresql-12-setup initdb如果遇到/var/lib/pgsql/12/data/目录权限问题需要先执行sudo mkdir -p /var/lib/pgsql/12/data sudo chown postgres:postgres /var/lib/pgsql/12/data2.2 服务管理与基础配置启动服务并设置开机自启sudo systemctl enable --now postgresql-12修改postgres用户密码时要注意密码复杂度要求ALTER USER postgres WITH PASSWORD Str0ngPssw0rd;远程访问配置需要修改两个关键文件postgresql.conf中取消注释并修改listen_addresses * port 5432pg_hba.conf末尾添加host all all 0.0.0.0/0 md53. 离线安装实战技巧3.1 RPM包依赖解决方案离线安装最大的挑战是依赖缺失。通过yum downloadonly可以提前下载依赖包yum install --downloadonly --downloaddir/tmp/pg_deps libicu常见依赖问题及对应包libicu缺失libicu-50.2-4.el7_7.x86_64.rpmlibxslt缺失libxslt-1.1.28-6.el7.x86_64.rpmlibedit缺失libedit-3.0-12.20121213cvs.el7.x86_64.rpm安装顺序必须严格遵守postgresql12-libspostgresql12postgresql12-serverpostgresql12-contrib3.2 自定义数据目录配置在生产环境中通常需要将数据目录放在独立存储mkdir /pgsqldata chown postgres:postgres /pgsqldata chmod 700 /pgsqldata修改服务单元文件/usr/lib/systemd/system/postgresql-12.serviceEnvironmentPGDATA/pgsqldata执行systemctl daemon-reload使配置生效。4. 安全加固与连接测试4.1 最小化防火墙配置虽然关闭防火墙最简单但生产环境建议精确放行firewall-cmd --permanent --add-port5432/tcp firewall-cmd --reload4.2 连接验证方法除了Navicat可以用psql命令行测试psql -h 服务器IP -U postgres -d postgres网络连通性检查telnet 服务器IP 5432 nc -zv 服务器IP 5432在最近的一次项目部署中我遇到连接超时问题最终发现是SELinux阻止了网络访问。临时解决方案setenforce 0永久解决方案是配置SELinux策略semanage port -a -t postgresql_port_t -p tcp 5432