问题现象
最近两个月碰到三次,莫名的 PG (PostgreSQL) 无法连接的情况,具体错误信息如下:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
前两次,自己瞎鼓捣,后面就好了,然后也没在意。然后今天早上 Mac 死机重启后,这个问题又出现了,然后各种重装 PG, 重启系统依然无解。
解决方案
无奈之下,开始老实地去 Google, 最后找到一篇 SO 的文章,彻底解决了问题。问题的原因是 Mac 突然死机时原来的进程没有正常关闭,重启后又被启动了。当再次启动 PG 时,PID 文件就无法正常工作了,因为记录的是系统死机前的进程信息。
这些信息都在 PG 的日志文件里看到,/usr/local/var/postgres
目录里面,有一个 server.log
文件可以看到所有的日志。
在我的日志里面看到有很多行
FATAL: lock file "postmaster.pid" already exists
HINT: Is another postmaster (PID 403) running in data directory "/usr/local/var/postgres"?
这行日志就告诉我们 postmaster.pid
已经存在,这就是之前死机前留下的。将此文件删除,问题就可以解决了,但是删除此文件前要确保 postgres
进程不在运行,所以我还是选择将此文件重命名。
最后,PG 终于启动了。