Postgres DB无法在Mac OSX上启动:错误提示:Unix域套接字上的连接[关闭]


80

我已经安装了Postgresql,然后在本地Mac OSX Mountain Lion上运行了一堆rails应用程序并创建了数据库等。今天,当我启动pgAdminIII并尝试启动数据库服务器一段时间后,出现此错误:

在此处输入图片说明

一个快速的谷歌显示了这篇文章。更多的浏览指出了这样一个事实,即可能存在某种postmaster.pid文件,这可能是导致此问题的根本原因。如果我删除那将没事。

但是,在删除计算机上的内容之前,我想确保我以系统的方式对此进行调试,这不会导致更多问题。

在删除该文件之前,我读过某个地方,我需要运行以下命令:

  ps auxw | grep post

如果没有任何结果,则可以删除文件。否则没有。好吧,我得到了该命令的结果:

  AM               476   0.0  0.0  2423356    184 s000  R+    9:28pm   0:00.00 grep post

所以,现在我当然完全困惑了。

所以我该怎么做?

这是我的postgres服务器错误日志的一部分:

 FATAL:  lock file "postmaster.pid" already exists
 HINT:  Is another postmaster (PID 171) running in data directory "/usr/local/var/postgres"?

Postgresql仍然没有运行,仍然出现相同的错误,并且没有任何变化。我太鸡鸡了,不检查就删除东西。

可以请一些专家指导菜鸟。

谢谢


首先,我不是专家。话虽如此,听起来您的数据库未正确关闭。我将删除pid文件,然后尝试启动数据库。
fbynite

是的,这就是我想要做的,但是我读到某个地方,如果在此过程中运行了pid,这可能会对数据库造成永久性损坏。不知道这是怎么回事
banditKing 13'Jul 23'at

@banditKing您永远不需要删除postmaster.pid。如果服务器无效(陈旧),则服务器会在启动时将其删除,这对于数据保护很重要。请说明如何通过EnterpriseDB安装程序,自制软件,Postgres.app首先在计算机上安装PostgreSQL。还请提及PostgreSQL版本。最后,如果您在Pgadmin-III中将“ localhost”显式添加到连接选项中,是否可行?如果是这样,那么您会被苹果公司前一段时间做出的一个非常糟糕的包装决定所困扰……
Craig Ringer 2013年

@CraigRinger感谢您的澄清。我不记得我是如何安装的,这是前一段时间。有什么我可以做的吗?或其中的数据只是测试数据,因此,在最坏的情况下,我可以卸载并重新安装。有关如何正确执行操作的任何好的博客/教程?
banditKing

1
@banditKing尝试重新启动?您可以从以下位置确定如何安装:wiki.postgresql.org/wiki/Installers/Mac_OS_X。看来您可能使用过Homebrew。如果PostgreSQL服务器错误地删除失败,postmaster.pid那么您可以在确认没有postgres进程在运行后将其删除,至关重要的是,确保实际上没有PostgreSQL进程。postmaster.pid但是,对于我来说,服务器无法删除旧版本失败了。
Craig Ringer

Answers:


188

我今天在Mac Sierra上遇到了同样的问题。在Mac Sierra中,您可以找到postmaster.pid里面/Users/<user_name>/Library/Application Support/Postgres/var-9.6。删除postmaster.pid和问题将得到解决。


19
postmaster.pid在此位置删除,问题已解决。谢谢!
JLF

1
这也是我需要postmaster.pid使用Postgres.app进行查找的地方
Jarsen

3
对于Postgres.app,它是相同的:可能是它位于此处/Users/<user>/Library/Application\ Support/Postgres/var-10/postmaster.pid
Simon Franzen

1
我也正在使用运行v10的Postgres.app。如果在运行Postgres时Mac意外关闭,那么我需要在重启计算机时删除postmaster.pid文件。有人知道这是否是应用程序的预期行为吗?如果故意的话,似乎是一个奇怪的设计。
亚历山大

在删除此文件之前,请确保该过程已启动。您可以cat postmaster.pid在目录中运行以进行查看并引用您没有看到PID在诸如活动监视器之类的程序中运行的情况。Postgres UI会提醒您这一点,但是我认为我应该在人们不愿意采取任何措施以及如何检查自己之前将其放在此处。postgres在活动监视器中查找并杀死所有相关内容,或者仅重新启动系统然后删除文件,也应该足够了。不这样做可能会导致数据库损坏
CTS_AE

37

如果数据库未正确关闭,则会发生这种情况。

要解决此问题,请删除postmaster.pid文件:

 rm /usr/local/var/postgres/postmaster.pid

或者,备份它:

 mv /usr/local/var/postgres/postmaster.pid /usr/local/var/postgres/postmaster.pid.backup

2
谢谢,此解决方案有效!删除postmaster.pid并运行后postgres -D /usr/local/var/postgres,它通知我有关错误的原因:“数据库系统未正确关闭;正在进行自动恢复”
Hoang Le

这解决了我的问题
Fabrice Yopa '18

这可行。就我而言,由于硬重启没有删除pid文件,因此只需要备份它即可。
乔治C

21

我现在正在使用数据库。

这是我采取的步骤:

  1. 我重启了电脑
  2. 我打开航站楼跑了 cd /
  3. 然后我做了 ls -la
  4. 确保我可以去 MackintoshHD/usr/local/var/postgres
  5. 然后做了 ls -la
  6. 在这里我看到了postmaster.pid文件
  7. 我运行cp postmaster.pid ~/Desktop了将文件复制到桌面的命令。如果要删除文件,我喜欢这样做。如果出了什么问题我可以放回去
  8. 然后我运行此命令从postgres目录中删除文件 rm -r postmaster.pid
  9. 我去了pgadmin3 gui并启动了它。和Voila起作用了:)

感谢@Craig Ringer的帮助


6
我的不在/ usr / local / var / postgres中,而在/ Users / [myhome] / Library / Application Support / Postgres / var-9.5 /中-上一个目录取决于您的版本,删除了postmaster.pid并像超级按钮一样工作,谢谢
Radek

4

我正在使用Postgres.app,以下代码对我有用:

我在下面的终端中输入了命令,事先找到了Postgres文件夹,而不使用“ justin”。

$declare -x PGDATA="/Users/justin/Library/Application Support/Postgres/var-9.4"

$pg_ctl restart -m immediate

正如Justin在其帖子中解释的那样,此后的输出为:

等待服务器关闭... pg_ctl失败:服务器没有关闭

再次输入命令后:

$pg_ctl restart -m immediate

它奏效了,我收到以下消息:

pg_ctl:旧的服务器进程(PID:373)似乎已经消失了。无论如何,启动服务器还是启动服务器LOG:数据库系统被中断;PDT日志最后一次于2015-07-28 18:15:26已知:数据库系统未正确关闭;正在进行自动恢复LOG:以0 / 4F0F7A8的零长度记录LOG:不需要重做LOG:数据库系统已准备好接受连接LOG:启动了autovacuum启动器

资源

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.