温馨提示×

Ubuntu PostgreSQL连接失败怎么办

小樊
41
2025-12-24 15:12:58
栏目: 云计算

Ubuntu 上 PostgreSQL 连接失败的定位与修复

一、先快速定位问题

  • 确认服务是否在运行:sudo systemctl status postgresql(或 sudo service postgresql status)。若未运行,先启动:sudo systemctl start postgresql
  • 本地用 socket 直连测试:sudo -u postgres psql -h 127.0.0.1 -p 5432psql -U postgres(本地 Unix 域套接字)。
  • 远程连通性测试:nc -vz <服务器IP> 5432telnet <服务器IP> 5432
  • 查看日志定位根因:sudo tail -n 50 /var/log/postgresql/postgresql-<版本>-main.log
  • 核对端口监听:ss -lntp | grep 5432netstat -a | grep PGSQL
    以上步骤能快速判断是“服务未起”“监听/网络问题”还是“认证问题”。

二、常见错误与对应修复

  • 错误1:No such file or directory(Unix 域套接字不存在)
    典型信息:could not connect to server: No such file or directory ... /var/run/postgresql/.s.PGSQL.5432
    处理:
    1. 确认服务已启动;2) 检查套接字目录与文件是否存在(常见在 /var/run/postgresql//tmp/);3) 必要时重启服务以重建套接字:sudo systemctl restart postgresql;4) 若套接字在不同目录,可在 postgresql.confunix_socket_directories 中统一目录,或创建软链(不建议长期使用):ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
  • 错误2:FATAL: Peer authentication failed / Ident authentication failed
    原因:本地 peer/ident 认证不匹配当前系统用户。
    处理(测试环境):编辑 pg_hba.conf,将对应行改为 trustmd5,然后 sudo systemctl reload postgresql;或切换到与数据库用户同名的系统用户再连接。
  • 错误3:Connection refused / 超时(远程连不上)
    原因:默认只监听 127.0.0.1,未开放远程访问。
    处理:
    1. postgresql.conf 设置 listen_addresses = '*'
    2. pg_hba.conf 增加规则(示例):host all all 0.0.0.0/0 md5(生产建议改为具体网段并使用更安全的认证方式);
    3. 重启:sudo systemctl restart postgresql
    4. 开放防火墙:sudo ufw allow 5432/tcpsudo iptables -I INPUT -p tcp --dport 5432 -j ACCEPT
  • 错误4:FATAL: private key file … has group or world access
    处理:修复密钥权限(示例):
    sudo chown postgres:postgres /etc/ssl/private/ssl-cert-snakeoil.key
    sudo chmod 640 /etc/ssl/private/ssl-cert-snakeoil.key
    然后重启服务。
    以上对应方案覆盖了本地套接字、认证方式、远程监听与防火墙等关键场景。

三、配置文件与路径速查

  • 配置文件位置(按版本区分):/etc/postgresql/<版本>/main/postgresql.confpg_hba.conf
  • 关键参数与示例:
    • listen_addresses = '*'(或指定内网 IP)
    • pg_hba.conf 示例:
      • 本地:local all all peer(或 md5/trust 视场景)
      • IPv4:host all all 127.0.0.1/32 md5
      • 远程网段:host all all 192.168.1.0/24 md5
  • 修改后执行:sudo systemctl reload postgresql(或 restart 使监听地址变更立即生效)。
  • 日志路径:/var/log/postgresql/postgresql-<版本>-main.log,优先从这里看具体报错行号与原因。

四、远程连接与安全建议

  • 仅开放必要来源网段(避免使用 0.0.0.0/0),并使用强认证(如 scram-sha-256md5);
  • 结合云安全组/本机防火墙仅放行可信 IP 与端口 5432
  • 若使用 pgAdmin,在创建服务器时填写正确的 主机名/IP、端口、用户名与密码,并确保网络与防火墙已放行。

0