PostgreSQL 9.6修改postgresql.conf后pg_ctl重启失败求助
解决PostgreSQL 9.6重启失败(postmaster.pid已存在)的问题
嘿,这种情况我碰到过好多次,别慌,咱们一步步拆解解决:
第一步:确认PostgreSQL进程是否真的在运行
首先得搞清楚,是不是还有PostgreSQL的进程在后台挂着,导致pid文件一直被占用。执行下面的命令:
ps aux | grep postgres
仔细看输出结果,重点找带有postmaster的进程(这是PostgreSQL的主进程)。如果能找到这类进程,先尝试优雅终止它:
kill <postmaster进程的PID>
等30秒左右,如果进程还没消失,再用强制终止(注意:强制终止可能丢失未提交事务,万不得已再用):
kill -9 <postmaster进程的PID>
第二步:删除残留的postmaster.pid文件
如果已经确认没有PostgreSQL进程在运行,但启动还是提示pid文件存在,那就是上次异常退出留下的残留文件。
先找到你的PostgreSQL数据目录位置,执行命令:
pg_config --data-dir
这个命令会返回数据目录的路径,比如/var/lib/postgresql/9.6/main。
然后进入该目录,删除pid文件:
rm /path/to/data/directory/postmaster.pid
第三步:检查postgresql.conf配置是否合法
别忘了你修改了配置文件,有可能是配置语法错误导致启动失败,进而引发后续的pid文件问题。用下面的命令验证配置有效性:
postgres -D /path/to/data/directory -c config_file=/path/to/postgresql.conf
如果配置有错误,这个命令会直接给出具体报错,修正后再继续。
第四步:重新启动PostgreSQL
现在尝试重新启动服务,你可以用pg_ctl命令:
pg_ctl restart -D /path/to/data/directory
如果你的系统用systemd管理服务,也可以用:
systemctl restart postgresql-9.6
启动成功后,尝试连接数据库确认是否正常:
psql -U <你的用户名> <数据库名>
额外小提醒
以后碰到重启卡住的情况,别反复执行start/restart命令,先排查进程状态和pid文件,不然容易把问题搞复杂。另外,修改配置文件后,最好先验证有效性再重启,能省不少麻烦。
内容的提问来源于stack exchange,提问作者Prashanth_Ramanathan
相关产品推荐
相关产品推荐

