配置PostgreSQL允许外部连接失败的问题排查
解决PostgreSQL无法接受外部连接的问题
核心问题分析
从启动日志和netstat输出可见,PostgreSQL仍仅监听127.0.0.1与::1本地回环地址,说明你修改的listen_addresses = '*'配置未被当前运行的实例加载,导致外部连接被拒绝。
分步解决方案
1. 确认配置文件路径正确性
先确保你修改的是当前实例正在使用的配置文件,而非其他副本:
- 本地登录PostgreSQL:
psql -U postgres - 执行SQL查询获取配置文件绝对路径:
SHOW config_file; SHOW hba_file; - 对比输出路径与你修改的文件路径,完全一致才继续后续操作。
2. 修正listen_addresses配置
打开正确路径下的postgresql.conf:
- 确保
listen_addresses = '*'无注释(行首无#) - 确认使用英文半角引号,无多余空格或拼写错误
- 搜索文件内是否有重复的
listen_addresses配置,若有则删除或注释掉重复项
3. 修正pg_hba.conf的IPv6规则
你当前的IPv6规则::0/0是错误的,正确的任意IPv6地址段应为::/0,修改后如下:
# IPv6 local connections: host all all ::/0 scram-sha-256
4. 正确重启PostgreSQL服务
在Pop! OS 22.04上,用systemctl命令确保服务完全重启:
sudo systemctl restart postgresql # 若为特定版本实例(如15),执行: sudo systemctl restart postgresql@15-main
5. 验证监听状态
重启后执行命令确认监听配置生效:
ss -tulpn | grep postgres
若输出包含0.0.0.0:5432和:::5432,说明已成功监听所有地址。
6. 测试连接
- 先在本地用服务器IP测试:
psql -h 192.168.50.136 -U postgres - 本地测试通过后,再从其他机器执行相同命令验证远程连接。若仍失败,可先用
telnet 192.168.50.136 5432排查端口连通性。
内容的提问来源于stack exchange,提问作者Steve Quinn
相关产品推荐
相关产品推荐

