Ubuntu 上 PostgreSQL 故障排查速查
一 快速定位流程
sudo systemctl status postgresql;Debian/Ubuntu 多版本可用 pg_lsclusters 查看所有实例(如 12/main、14/main)。sudo tail -f /var/log/postgresql/postgresql-14-main.log,优先从日志中的 FATAL/ERROR 行入手。postgresql.conf 的 port 或释放占用进程。postgresql.conf 的 listen_addresses、port,以及 pg_hba.conf 的本地/远程认证规则是否匹配当前连接方式。sudo systemctl reload postgresql(或针对实例 sudo systemctl reload postgresql@14-main)。二 常见症状与修复要点
症状 A:psql 报 “could not connect to server: No such file or directory … /var/run/postgresql/.s.PGSQL.5432”
可能原因:服务器未运行、Unix 域套接字目录不一致、套接字文件未生成或被清理。
处理步骤:
sudo systemctl status postgresql;若未运行,启动服务并再次检查日志。find /tmp -name .s.PGSQL.5432 与 find /var/run/postgresql -name .s.PGSQL.5432;若仅存在于 /tmp 而客户端默认查找 /var/run/postgresql,可创建符号链接:sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432(注意目录权限与重启后可能重建)。症状 B:启动失败或反复重启,日志提示 “FATAL: database files are incompatible with server”
可能原因:跨主版本直接读取数据目录(如 PG 12 数据目录被 PG 14 读取)。
处理步骤:
postgresql-12-postgis-2.5、postgresql-14-postgis-3。pg_upgrade 迁移:先初始化新数据目录,再执行升级(可按需使用 --link 减少拷贝)。症状 C:本地连接报 “FATAL: Peer authentication failed for user ‘postgres’” 或 “Ident authentication failed”
可能原因:pg_hba.conf 对本地连接使用了 peer/ident,而当前 OS 用户与数据库用户不匹配。
处理步骤:
pg_hba.conf 将对应行改为 trust 或 md5,然后 sudo systemctl reload postgresql。sudo -u postgres psql 连接,或按需创建同名数据库用户并配置合适的认证方式。listen_addresses 与 pg_hba.conf 的 host 规则(如 192.168.1.0/24 md5)。症状 D:端口 5432 被占用或配置冲突
可能原因:其他进程占用 5432,或 postgresql.conf 的 port 设置异常。
处理步骤:
sudo netstat -tulpen | grep 5432(或 ss -lntp | grep 5432)。postgresql.conf 的 port,重启服务。症状 E:SSL 密钥权限错误导致启动失败
可能原因:如 /etc/ssl/private/ssl-cert-snakeoil.key 权限过宽。
处理步骤:
sudo chown postgres /etc/ssl/private/ssl-cert-snakeoil.key,sudo chgrp postgres ...,sudo chmod 740 ...。三 常用命令清单
sudo systemctl status postgresql、sudo systemctl restart postgresql、pg_lsclusterssudo tail -f /var/log/postgresql/postgresql-14-main.logsudo ss -lntp | grep 5432 或 sudo netstat -tulpen | grep 5432find /tmp -name .s.PGSQL.5432、find /var/run/postgresql -name .s.PGSQL.5432sudo -u postgres psql -c "\du"(查看角色)、检查 /var/lib/postgresql/ 属主与权限sudo systemctl reload postgresql(或 sudo systemctl reload postgresql@14-main)四 升级与兼容性注意
五 风险提示
pg_hba.conf 为 trust 或调整 SSL 密钥权限会降低安全性,仅应在受控环境、测试场景或变更窗口内短时采用,并尽快恢复为更安全的认证方式。pg_upgrade、initdb、pg_resetwal 等高风险操作前请先做好完整备份,并在非生产环境充分演练。