You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派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. 实例服务未设置开机自启,导致开机后数据库进程未启动
  2. 实例服务启动顺序异常,依赖的网络等资源未就绪,导致监听端口未正常开放
  3. 监听配置或权限规则限制了局域网连接,重启服务后配置被正确加载

解决方案

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 08:35:02