Ubuntu 下 PostgreSQL 故障排查清单
一 快速定位与通用检查
sudo systemctl status postgresql;若使用传统集群管理,可用 pg_lsclusters 查看各版本/集群的运行状态。sudo tail -f /var/log/postgresql/postgresql-<version>-main.log 观察启动失败、认证错误等关键信息。sudo netstat -tulpen | grep 5432。listen_addresses、port;客户端认证 pg_hba.conf 用于来源网段、认证方式(如 md5、scram-sha-256)与数据库/用户的白名单控制。二 常见故障与修复
psql: could not connect to server: No such file or directory ... /var/run/postgresql/.s.PGSQL.5432。postgresql.conf 的 unix_socket_directories 中统一目录,或创建符号链接(如 ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432);4) 重启服务并复测。netstat 找到占用 5432 的进程并停止/更换端口;或在 postgresql.conf 中将 port 改为未占用端口后重启。Result: protocol。pg_hba.conf 的语法与来源网段、认证方式;修改后执行 sudo systemctl restart postgresql 使配置生效。systemctl 报权限错误、或 psql 仍找不到套接字。sudo systemctl start postgresql 启动服务;若仍异常,检查 /var/run/postgresql 目录权限与套接字文件;必要时以 sudo -u postgres psql 本地连接验证。三 场景化排查要点
Result: protocol。sudo mkdir -p /etc/systemd/system/postgresql@15-main.service.dsudo tee /etc/systemd/system/postgresql@15-main.service.d/override.conf <<'EOF'[Service]ExecStartPre=/bin/sleep 5EOFsudo systemctl daemon-reload && sudo systemctl restart postgresql@15-main,验证延迟后已正常启动。systemctl 报权限拒绝或 psql 找不到套接字。sudo systemctl start postgresql 启动服务;若仍失败,检查目录权限与套接字;必要时以 sudo -u postgres psql 本地直连验证服务可用性。四 性能类问题的排查路径
top、htop、iostat、vmstat)。postgresql.conf 中开启慢查询日志,例如 log_min_duration_statement = 1000(记录超过 1 秒 的语句);pg_stat_statements 找出最耗时/最频繁 SQL;EXPLAIN (ANALYZE, BUFFERS) 检查是否出现全表扫描、排序/哈希溢出到磁盘等。VACUUM FULL/CLUSTER 或重建索引。五 常用命令与配置路径速查
sudo systemctl status postgresql、sudo systemctl restart postgresql、pg_lsclusterssudo tail -f /var/log/postgresql/postgresql-<version>-main.log、sudo netstat -tulpen | grep 5432/etc/postgresql/<version>/main/postgresql.conf、/etc/postgresql/<version>/main/pg_hba.conf、/var/lib/postgresql/<version>/mainsudo -u postgres psql -c "select version();".s.PGSQL.5432,必要时统一 unix_socket_directories 或创建符号链接