无法连接远程PostgreSQL数据库问题排查求助
远程PostgreSQL连接超时问题排查与解决
已完成的排查动作
- netstat 监听状态:PostgreSQL 已正常监听所有网卡的5432端口
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 32707/postgres - postgresql.conf 监听配置:已设置允许监听所有地址
listen_addresses = "*" - pg_hba.conf 访问控制:已配置允许指定主机地址(xx.xx.xx.xx)的所有用户访问所有数据库
host all all xx.xx.xx.xx/0 trust - 防火墙(ufw)规则:已开放5432端口对指定主机地址的访问
5432 ALLOW xx.xx.xx.xx - 测试结果:重启PostgreSQL服务后,执行
psql -h yy.yy.yy.yy -p 5432连接超时;SSH可正常连接服务器,telnet yy.yy.yy.yy 5432挂起;本地网络内其他机器也无法连接该数据库。
下一步排查与解决步骤
确认目标服务器地址正确性
- 核实
yy.yy.yy.yy是否为服务器的真实公网/内网IP:服务器端执行curl ifconfig.me获取公网IP,对比是否与yy.yy.yy.yy一致;若为内网环境,确认该IP是否为服务器内网地址,且本地机器与服务器处于同一内网段。
- 核实
检查云服务商安全组/网络ACL
- 若服务器部署在云平台(如AWS、阿里云等),需登录云控制台检查安全组规则,确认是否允许来源IP(xx.xx.xx.xx)访问5432端口;部分平台的网络ACL也可能限制端口流量,需同步排查。
修正pg_hba.conf规则格式
- 注意
xx.xx.xx.xx/0的写法逻辑:/0代表允许所有IP访问,若你的主机是单个固定IP,应改为xx.xx.xx.xx/32以精准匹配;修改后重启PostgreSQL服务,再次测试连接。 - 确认配置生效:执行
postgres -c "show hba_file"获取配置文件路径,检查修改内容是否保存正确,且服务已完成重启。
- 注意
验证服务器本地连通性
- 在服务器本地执行
psql -h localhost -p 5432,确认PostgreSQL服务本身可正常访问,排除服务异常问题; - 执行
telnet localhost 5432,验证本地端口监听正常。
- 在服务器本地执行
排查网络路由与丢包
- 本地机器执行
traceroute yy.yy.yy.yy(Linux/macOS)或tracert yy.yy.yy.yy(Windows),追踪数据包传输路径,确认在哪个节点出现丢包; - 确认本地机器的真实IP:执行
curl ifconfig.me获取本地公网IP,对比pg_hba.conf和ufw规则中的xx.xx.xx.xx是否一致。
- 本地机器执行
内容的提问来源于stack exchange,提问作者TheKillbot
相关产品推荐
相关产品推荐

