Ubuntu系统PostgreSQL 11启动失败(pg_ctl报错)排查咨询
以下是针对Ubuntu系统中PostgreSQL 11启动失败的具体排查步骤:
检查数据目录权限
默认数据目录为/var/lib/postgresql/11/main,执行命令查看权限:ls -ld /var/lib/postgresql/11/main目录必须归
postgres用户及用户组所有,权限需设为700。若不符合,执行以下命令修正:chown -R postgres:postgres /var/lib/postgresql/11/main chmod 700 /var/lib/postgresql/11/main查看完整日志细节
默认日志路径通常是/var/log/postgresql/postgresql-11-main.log,启动失败的核心报错往往藏在日志末尾,执行命令查看最近50行:tail -n 50 /var/log/postgresql/postgresql-11-main.log重点关注
FATAL或ERROR开头的行,这是定位问题的关键。手动以postgres用户启动调试
切换到postgres用户手动启动,能生成更详细的调试日志:su - postgres pg_ctl start -D /var/lib/postgresql/11/main -l /tmp/pg_debug.log之后查看
/tmp/pg_debug.log文件,里面会包含启动过程中的所有细节报错。检查端口占用情况
PostgreSQL默认使用5432端口,执行命令检查是否被其他进程占用:ss -tulpn | grep 5432若有占用,可杀掉对应进程,或修改
postgresql.conf中的port参数更换端口。排查配置文件错误
备份当前配置后,尝试用默认配置启动,排查是否是配置参数错误导致:cp /var/lib/postgresql/11/main/postgresql.conf /var/lib/postgresql/11/main/postgresql.conf.bak cp /usr/share/postgresql/11/postgresql.conf.sample /var/lib/postgresql/11/main/postgresql.conf之后重新启动服务,若能正常启动,再逐步对比原配置找出问题参数。
检查系统资源限制
查看postgres用户的文件句柄限制:su - postgres -c "ulimit -n"PostgreSQL需要至少1000以上的文件句柄,若不足,编辑
/etc/security/limits.conf添加:postgres soft nofile 65536 postgres hard nofile 65536保存后重启系统生效。
检查磁盘空间
确认数据目录所在磁盘是否已满:df -h /var/lib/postgresql若磁盘使用率达100%,清理冗余文件释放空间后再尝试启动。
内容的提问来源于stack exchange,提问作者user1156544

