连接PostgreSQL失败通常与网络配置、服务状态、配置文件设置、权限或SELinux相关,以下是系统化的排查步骤:
确保PostgreSQL服务正在运行,若未启动则无法建立连接。
sudo systemctl status postgresql
sudo systemctl start postgresql
sudo systemctl enable postgresql
sudo journalctl -xe
ping命令测试数据库服务器IP是否可达。ping <服务器IP>
telnet或nc测试端口是否开放。telnet <服务器IP> 5432
# 或
nc -zv <服务器IP> 5432
若端口未开放,需检查防火墙或SELinux设置。默认情况下,PostgreSQL仅监听本地连接(localhost),需修改postgresql.conf允许远程连接。
psql命令查询):psql -U postgres -c "SHOW config_file;"
postgresql.conf,修改listen_addresses为*(允许所有IP连接)或指定服务器IP:sudo vi /var/lib/pgsql/data/postgresql.conf
# 找到并修改以下行
listen_addresses = '*'
sudo systemctl restart postgresql
pg_hba.conf控制客户端认证方式,需添加允许远程连接的规则。
pg_hba.conf文件(路径同postgresql.conf):sudo vi /var/lib/pgsql/data/pg_hba.conf
host all all 0.0.0.0/0 md5
sudo systemctl restart postgresql
若SELinux处于Enforcing模式,可能阻止PostgreSQL接受远程连接。
sudo setenforce 0
/etc/selinux/config文件):sudo vi /etc/selinux/config
# 将SELINUX=enforcing改为SELINUX=permissive
确保连接使用的数据库用户具备远程访问权限。
postgres用户登录PostgreSQL:sudo -u postgres psql
username、database_name为实际值):GRANT ALL PRIVILEGES ON DATABASE database_name TO username;
ALTER USER username WITH PASSWORD 'your_password'; -- 若密码过期需重置
\q
sudo systemctl restart postgresql
若以上步骤均无法解决,日志文件会提供具体错误信息(如认证失败、配置语法错误)。
/var/log/postgresql/目录下,使用以下命令实时查看:sudo tail -f /var/log/postgresql/postgresql-<版本>-main.log
根据日志中的错误提示(如“Ident authentication failed”“Connection refused”)进一步排查。通过以上步骤,可覆盖CentOS上PostgreSQL连接失败的常见场景。若问题仍未解决,建议提供具体的错误信息(如日志内容、客户端报错),以便针对性解决。