Ubuntu环境下PostgreSQL故障排查指南
首先确认PostgreSQL服务是否正在运行,使用以下命令查看服务状态:
sudo systemctl status postgresql
若服务未运行,尝试启动服务:
sudo systemctl start postgresql
若启动失败,需进一步检查日志定位原因。
PostgreSQL的日志文件是故障排查的核心依据,常规日志路径为:
/var/log/postgresql/<版本号>/main/postgresql.log(如/var/log/postgresql/15/main/postgresql.log)
使用以下命令实时查看日志末尾内容:
sudo tail -f /var/log/postgresql/<版本号>/main/postgresql.log
通过日志中的错误信息(如权限问题、配置错误、磁盘空间不足等)快速定位故障根源。
配置文件路径通常为/etc/postgresql/<版本号>/main/postgresql.conf,需重点检查以下参数:
listen_addresses:确保设置为'*'(允许所有IP连接)或具体IP地址;port:确认端口(默认5432)未被其他进程占用;max_connections:根据服务器内存调整(建议不超过物理内存的50%)。配置文件路径为/etc/postgresql/<版本号>/main/pg_hba.conf,需添加或修改以下行以允许远程连接(如需):
host all all 0.0.0.0/0 md5
修改后需重启服务使配置生效:
sudo systemctl restart postgresql。
若服务无法启动且日志提示“postmaster.pid exists”,需手动清理:
ps -ef | grep postgres;sudo kill -9 <PID>(替换为实际进程ID);sudo rm /var/lib/postgresql/<版本号>/main/postmaster.pid;若日志提示“directory is not accessible”,需检查数据目录权限(通常为/var/lib/postgresql/<版本号>/main):
sudo chown -R postgres:postgres /var/lib/postgresql/<版本号>/main
sudo chmod -R 700 /var/lib/postgresql/<版本号>/main。
确保Ubuntu防火墙(UFW)允许PostgreSQL端口(默认5432)通过:
sudo ufw allow 5432/tcp
sudo ufw enable(若未启用防火墙)。
在pgAdmin中创建服务器时,需确认以下信息正确:
postgres)的凭据;postgres数据库。使用pg_stat_statements扩展识别慢查询:
CREATE EXTENSION pg_stat_statements;;SELECT * FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10;query(查询语句)、total_time(总执行时间)、calls(调用次数)字段。EXPLAIN (ANALYZE, BUFFERS)分析查询计划,确认是否使用了索引;CREATE INDEX idx_column_name ON table_name (column_name);;REINDEX INDEX idx_column_name;。使用系统工具监控PostgreSQL的资源使用情况:
top/htop:查看CPU、内存占用;iotop:查看磁盘I/O;df -h:查看磁盘空间(确保数据分区有足够空间)。