局域网内其他主机无法连接PostgreSQL数据库问题咨询
PostgreSQL局域网连接失败排查步骤
- 确认监听配置生效
改完postgresql.conf的listen_addresses = '*'后必须重启PostgreSQL服务,仅重载配置不生效。在服务端执行ss -tulnp | grep postgres,确认返回结果中存在0.0.0.0:5432的监听项,而非仅127.0.0.1:5432。 - 排查端口可达性
- 检查服务端防火墙规则:Linux环境执行
firewall-cmd --list-all(firewalld)或ufw status(ufw),确认5432端口已对同网段放行;Windows环境检查Windows Defender防火墙入站规则,确认已开放5432端口。 - 在客户端主机执行端口连通性测试:
telnet 10.0.0.23 5432或nc -zv 10.0.0.23 5432,如果端口无法连通,优先解决网络/防火墙问题。
- 检查服务端防火墙规则:Linux环境执行
- 修正pg_hba.conf配置
你之前填写的10.0.0.X不是合法的网段格式,正确规则如下,注意要将规则写在默认拒绝规则之前:
改完后执行host all all 10.0.0.0/24 scram-sha-256SELECT pg_reload_conf();重载配置即可,无需重启服务。 - 校验数据库权限
本地登录PostgreSQL后执行\l确认目标数据库dbname真实存在,执行\du确认连接用户拥有该数据库的访问权限,可临时赋权测试:GRANT ALL PRIVILEGES ON DATABASE dbname TO your_username; - 查看日志定位具体问题
在postgresql.conf中开启连接日志:
重载配置后重新尝试连接,查看PostgreSQL运行日志:如果无新日志生成说明连接请求被网络/防火墙拦截,如有日志会明确标注拒绝原因(hba规则不匹配、密码错误、权限不足等)。log_connections = on log_disconnections = on
内容的提问来源于stack exchange,提问作者Arcimedez
相关产品推荐
相关产品推荐

