温馨提示×

centos为何连接postgresql失败

小樊
34
2026-09-12 07:21:27
栏目: 云计算

CentOS 连接 PostgreSQL 失败,常见原因可以分为 网络/防火墙、PostgreSQL 配置、用户权限、客户端问题 几类。下面按“排查顺序”给你说明,基本能覆盖 90% 的情况。


一、先确认“连接失败”的表现

不同错误对应不同原因:

  • could not connect to server: Connection refused → 服务没开 / 端口不对 / 防火墙
  • timeout → 网络不通 / 防火墙
  • FATAL: password authentication failed → 用户名/密码/PG 用户配置
  • FATAL: no pg_hba.conf entry → 访问控制未允许

二、PostgreSQL 服务是否启动

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

四、pg_hba.conf 是否允许你的来源 IP

这是 最常见被忽略的一点

编辑:

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

五、防火墙(CentOS 重点)

CentOS 7/8

firewall-cmd --list-ports
firewall-cmd --add-port=5432/tcp --permanent
firewall-cmd --reload

如果是云服务器

  • 安全组必须放行 5432
  • 很多“本地能连、远程连不上”都是安全组问题

六、用户与数据库是否存在

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;

七、SELinux(CentOS 特有坑)

如果以上都正常但仍失败:

getenforce

如果是 Enforcing,可临时测试:

setenforce 0

如确认是 SELinux 问题,再配置策略,不要长期关闭。


八、客户端连接方式是否正确

本地:

psql -U user -d dbname -h 127.0.0.1

远程:

psql -h 服务器IP -U user -d dbname

九、快速自检清单 ✅

  • [ ] PostgreSQL 已启动
  • [ ] listen_addresses 不是 localhost
  • [ ] pg_hba.conf 已允许来源 IP
  • [ ] 防火墙/安全组放行 5432
  • [ ] 用户名、密码、数据库正确
  • [ ] SELinux 未拦截

如果你愿意,可以把 具体报错信息 + CentOS 版本 + PostgreSQL 版本 发出来,我可以直接帮你定位是哪一步的问题。

0