树莓派PostgreSQL需重启才能远程连接?求原因与解决方案
树莓派PostgreSQL 15.1开机连接异常问题排查与解决
问题现象
树莓派安装PostgreSQL 15.1后存在以下异常:
- 开机后执行
systemctl status postgresql,服务状态显示为active (exited) - 同一局域网内的Debian设备运行程序首次连接数据库时,连接请求被拒绝
- 在树莓派上执行
systemctl restart postgresql后,Debian设备可正常连接数据库
相关状态信息
开机后服务状态
root@raspberrypi:/home/pi# systemctl status postgresql ● postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; preset: enabled) Active: active (exited) since Sun 2023-12-10 09:18:30 GMT; 5h 4min ago Process: 743 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 743 (code=exited, status=0/SUCCESS) CPU: 2ms Dec 10 09:18:30 raspberrypi systemd[1]: Starting postgresql.service - PostgreSQL RDBMS... Dec 10 09:18:30 raspberrypi systemd[1]: Finished postgresql.service - PostgreSQL RDBMS. root@raspberrypi:/home/pi#
重启后服务状态
root@raspberrypi:/home/pi# systemctl restart postgresql root@raspberrypi:/home/pi# root@raspberrypi:/home/pi# systemctl status postgresql ● postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; preset: enabled) Active: active (exited) since Sun 2023-12-10 14:23:14 GMT; 11s ago Process: 918 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 918 (code=exited, status=0/SUCCESS) CPU: 2ms Dec 10 14:23:14 raspberrypi systemd[1]: Starting postgresql.service - PostgreSQL RDBMS... Dec 10 14:23:14 raspberrypi systemd[1]: Finished postgresql.service - PostgreSQL RDBMS. root@raspberrypi:/home/pi#
PostgreSQL版本信息
% psql --version psql (PostgreSQL) 15.1 %
原因分析
从服务状态可见,postgresql.service的ExecStart指向/bin/true,这是一个占位符服务,仅用于触发PostgreSQL实例服务的管理,实际的数据库进程由postgresql@<版本>-<集群名>.service(例如postgresql@15-main.service)这类具体服务管理。
开机时可能存在以下问题:
- 实例服务未设置开机自启,导致开机后数据库进程未启动
- 实例服务启动顺序异常,依赖的网络等资源未就绪,导致监听端口未正常开放
- 监听配置或权限规则限制了局域网连接,重启服务后配置被正确加载
解决方案
1. 检查并启动实例服务
执行以下命令查看具体实例服务的状态:
systemctl status postgresql@15-main.service
如果服务未运行,手动启动:
sudo systemctl start postgresql@15-main.service
2. 设置实例服务开机自启
确保实例服务随系统开机启动:
sudo systemctl enable postgresql@15-main.service
3. 验证并调整监听配置
修改监听地址
编辑PostgreSQL配置文件:
sudo nano /etc/postgresql/15/main/postgresql.conf
找到listen_addresses配置项,设置为允许局域网访问的地址:
listen_addresses = '*' # 允许所有IP访问,或指定Debian设备IP/网段
调整访问控制规则
编辑pg_hba.conf添加局域网连接权限:
sudo nano /etc/postgresql/15/main/pg_hba.conf
添加以下规则(替换为你的局域网网段和认证方式):
host all all 192.168.1.0/24 scram-sha-256
修改配置后,重启实例服务生效:
sudo systemctl restart postgresql@15-main.service
4. 优化服务管理(可选)
若希望直接通过postgresql.service管理实例,可修改该服务文件,将ExecStart替换为实例服务的启动命令,或创建一个包含实例服务的target文件。但更推荐直接管理具体的实例服务,避免混淆。
内容的提问来源于stack exchange,提问作者Michel
相关产品推荐
相关产品推荐

