树莓派PostgreSQL远程连接失败,求排查解决方法
PostgreSQL 13远程连接故障排查(DietPi/Debian 11)
已完成操作
- 在树莓派上安装PostgreSQL 13
- 设置树莓派静态IP
- 修改
/etc/postgresql/13/main/postgresql.conf:设置listen_addresses = '*' - 修改
/etc/postgresql/13/main/pg_hba.conf:添加规则host all all 0.0.0.0/0 md5
当前故障现象
- 本地执行
pg_isready返回正常:root@pibox:~# pg_isready /run/postgresql:5432 - accepting connections - 本地指定IP执行
pg_isready无响应:root@pibox:~# pg_isready -d <db_name> -h <static_ip> -p 5432 -U postgres <pi's IP>:5432 - no response - 本地指定127.0.0.1执行
pg_isready同样无响应 - macOS 12.4笔记本远程连接报错:
psql: error: connection to server at "<the pi's IP>", port 5432 failed: Connection refused
解决步骤
1. 重启PostgreSQL服务
修改配置文件后必须重启服务才会生效:
systemctl restart postgresql
验证服务状态,确保显示active (running):
systemctl status postgresql
2. 确认PostgreSQL监听状态
用ss命令检查PostgreSQL是否真正监听所有地址的5432端口:
ss -tulpn | grep postgres
正常输出应包含0.0.0.0:5432和:::5432(IPv6)。如果仅显示/run/postgresql/.s.PGSQL.5432,需重新检查postgresql.conf:
- 打开文件确认
listen_addresses = '*'前没有#注释 - 检查文件是否有重复的
listen_addresses配置(后续行可能覆盖设置)
3. 开放防火墙端口
DietPi默认可能启用ufw防火墙,需开放5432端口:
ufw allow 5432/tcp ufw reload
验证规则是否生效:
ufw status
确保看到5432/tcp允许所有来源访问
4. 设置postgres用户密码
远程连接需要postgres用户有有效密码,执行以下命令设置或重置:
su - postgres psql -c "ALTER USER postgres WITH PASSWORD 'your_secure_password';" exit
替换your_secure_password为实际密码
5. 调整pg_hba.conf规则顺序
pg_hba.conf规则按顺序匹配,确保你添加的host all all 0.0.0.0/0 md5没有被前面的拒绝/限制规则覆盖:
nano /etc/postgresql/13/main/pg_hba.conf
将这条规则移到所有拒绝规则之前,修改后重启PostgreSQL服务
6. 本地测试IP连接
用psql直接指定树莓派IP测试连接:
psql -d postgres -h <static_ip> -p 5432 -U postgres
输入密码后若能进入数据库,说明本地IP连接正常
7. macOS端网络连通性测试
先确认树莓派IP可达:
ping <pi_static_ip>
再测试端口是否开放:
telnet <pi_static_ip> 5432
若telnet提示Connected to <pi_static_ip>,说明网络无问题;否则检查路由器端口转发(跨局域网场景)或树莓派防火墙配置
内容的提问来源于stack exchange,提问作者Demetri Pananos
相关产品推荐
相关产品推荐

