【问题标题】:postgres sometimes will not start after rebootpostgres 有时在重新启动后无法启动
【发布时间】:2014-06-21 10:45:31
【问题描述】:

在我升级到版本 9.3.2 自制软件后,我的 postgres 安装发生了一些奇怪的事情。

有时而不是每次,如果我输入 psql 我会收到以下错误消息:

无法连接到服务器:没有这样的文件或目录 服务器是否在本地运行并接受 Unix 域套接字“/tmp/.s.PGSQL.5432”上的连接?

似乎 postgres 正在运行,因为如果我尝试使用以下命令停止 postgres:

pg_ctl -D /usr/local/var/postgres stop -s -m fast

我收到以下回复:

pg_ctl: 服务器没有关闭

如果我查看server.log,我可以看到以下条目:

致命:锁定文件“postmaster.pid”已经存在提示:是另一个 postmaster (PID 208) 在数据目录中运行 “/usr/local/var/postgres”?

经过一番疯狂的谷歌搜索后,我可以通过输入以下命令来解决这个问题:

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

我想首先了解正在发生的事情,其次我想一劳永逸地解决它。

谁能解释可能发生的情况和治疗方法?

【问题讨论】:

  • 更新。文件名已更改。但我只是去了~/Library/LaunchAgents/ 并手动删除了com.postgresapp.Postgres2LoginHelper.plist,Postgres 一切正常。我的问题几乎可以肯定是崩溃的结果。不需要卸载,但是 YMMV。

标签: postgresql


【解决方案1】:

首先,尝试在 PostgreSQL 和 OSX(以及 PG 9.3)上提取日志,这很可能在这里:

/Library/PostgreSQL/9.3/data/pg_log

检查此日志,看看其中是否有任何内容可以解释更多正在发生的事情。将其张贴在这里或过去的垃圾箱中。这可以帮助社区调试问题。

接下来,'pg_ctl' 说服务器没有关闭的原因是因为你有一个陈旧的套接字文件和/或一个陈旧的 .plist 文件,在上次关闭时没有被删除。这可能表明 PostgreSQl 守护程序“崩溃”或被强制关闭并且没有完成。

您使用的命令删除了陈旧的文件,从而为创建新的套接字文件让路。

此外,了解这是 PostgreSQL 的小升级还是大升级也很重要。主要升级总是需要迁移数据目录。使用新引擎运行旧的 PostgreSQL 数据目录可能会产生意想不到的结果。

【讨论】:

  • 我已经更新了帖子。日志文件包含以下条目: 致命:锁定文件“postmaster.pid”已存在提示:数据目录“/usr/local/var/postgres”中是否正在运行另一个 postmaster(PID 208)?
  • @dagda1 感谢您的更新,但这并没有多大帮助。它确实表明有一个陈旧的 .pid 文件没有被清理。正如我在回答中所问的那样,这是次要升级还是主要升级?您是否仍有可能在 Homebrew 环境中运行 old PostgreSQL?
  • 这个错误再次袭击了我,我在文章中发布的修复这次不起作用。日志这样写: FATAL: lock file "postmaster.pid" already exists 如何判断另一个实例是否正在运行?
  • 对不起,我的回复晚了,OSX 上的 Homebrew 系统对我来说有点未知,但要检查你是否有另一个 PostgreSQL 实例正在运行,你可以检查 OSX 的“活动监视器”来查看如果有任何属于 PostgreSQL 的守护进程(进程)正在运行。这在我的脑海中,将是下一个最好的检查。
猜你喜欢
  • 2013-06-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2014-08-22
  • 2023-02-09
  • 2018-10-04
  • 2020-01-24
  • 1970-01-01
相关资源
最近更新 更多