CentOS 连接 PostgreSQL 失败,常见原因可以分为 网络/防火墙、PostgreSQL 配置、用户权限、客户端问题 几类。下面按“排查顺序”给你说明,基本能覆盖 90% 的情况。
不同错误对应不同原因:
could not connect to server: Connection refused → 服务没开 / 端口不对 / 防火墙timeout → 网络不通 / 防火墙FATAL: password authentication failed → 用户名/密码/PG 用户配置FATAL: no pg_hba.conf entry → 访问控制未允许systemctl status postgresql
或
ps aux | grep postgres
如果没启动:
systemctl start postgresql
systemctl enable postgresql
PostgreSQL 默认 只监听 localhost
编辑配置文件(版本不同路径可能不同):
vi /var/lib/pgsql/data/postgresql.conf
确认:
listen_addresses = '*'
或至少包含你连接的 IP
修改后重启:
systemctl restart postgresql
这是 最常见被忽略的一点
编辑:
vi /var/lib/pgsql/data/pg_hba.conf
例如允许所有 IP 用密码连接:
host all all 0.0.0.0/0 md5
或指定 IP:
host all all 192.168.1.0/24 md5
修改后:
systemctl reload postgresql
firewall-cmd --list-ports
firewall-cmd --add-port=5432/tcp --permanent
firewall-cmd --reload
sudo -u postgres psql
\du
\l
确认:
创建示例:
CREATE USER test WITH PASSWORD 'pwd';
CREATE DATABASE testdb OWNER test;
GRANT ALL PRIVILEGES ON DATABASE testdb TO test;
如果以上都正常但仍失败:
getenforce
如果是 Enforcing,可临时测试:
setenforce 0
如确认是 SELinux 问题,再配置策略,不要长期关闭。
本地:
psql -U user -d dbname -h 127.0.0.1
远程:
psql -h 服务器IP -U user -d dbname
如果你愿意,可以把 具体报错信息 + CentOS 版本 + PostgreSQL 版本 发出来,我可以直接帮你定位是哪一步的问题。