无法连接到通过Brew服务运行的Postgres服务器


80

我一直在寻找解决方案,但是找不到有效的解决方案。

我已经brew install postgres在MacBook中使用brew()安装了postgres ,目前正在使用brew服务运行它(将brew services list postgres显示为正在运行的服务)。但是,当我尝试运行时,出现psql以下错误。

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

有人已经解决了类似的问题吗?

Answers:


186

我遇到了相同的错误,并通过删除进程pid文件修复了该错误:

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


谢谢,它有效!但为什么?怎么样?每次重新启动后是否都运行过此命令?
rap-2-h

13
@ rap-2-h似乎Postgres没有被正确关闭。当我必须按住电源按钮关闭Mac时出现此问题。
威尔逊席尔瓦

6
如果您使用特定版本的桶(例如:postgresql@9.6),请确保使用正确的文件夹而不是“ / postgres /”
Vjatseslav Gedrovits

1
确实,这与macOS无法正确关闭postgres有关,但对我来说,甚至在我使用Apple菜单+“ Shut down ...”选项时发生,因此它与强制关闭没有特别的关系(至少, macOS 10.14.3)。修复此问题,竖起大拇指(y)
SidOfc

如果这不起作用,请尝试 tail /usr/local/var/log/postgres.log。这可能会为您提供有关postgres失败原因的更多信息。通常,您可以从Google的登录日志中发布错误消息,然后在StackOverflow上找到另一种解决方法:-D
edan

83

我今天遇到了这个问题。postgres停止接受连接,尽管自制软件认为它正在运行。

为了解决它,我跑了,

brew services restart -vvv postgresql

该命令的输出,

==> Successfully stopped `postgresql` (label: homebrew.mxcl.postgresql)
==> Generated plist for postgresql:
   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
   <plist version="1.0">
   <dict>
     <key>KeepAlive</key>
     <true/>
     <key>Label</key>
     <string>homebrew.mxcl.postgresql</string>
     <key>ProgramArguments</key>
     <array>
       <string>/usr/local/opt/postgresql/bin/postgres</string>
       <string>-D</string>
       <string>/usr/local/var/postgres</string>
     </array>
     <key>RunAtLoad</key>
     <true/>
     <key>WorkingDirectory</key>
     <string>/usr/local</string>
     <key>StandardErrorPath</key>
     <string>/usr/local/var/log/postgres.log</string>
   </dict>
   </plist>

然后我想,嗯,也许那个日志文件里有东西,

tail -n 10 /usr/local/var/log/postgres.log

果然,

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

因此,我删除了该文件

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

一切又开始工作了。


7
对我来说最有用的命令是tail -n 10 /usr/local/var/log/postgres.log
Nick Roz,

35

就我而言,postmaster.pid文件甚至不在那儿。通过升级postgres使其正常工作。

brew update
brew upgrade

然后,因为我将主要版本从10升级到了11,所以我还必须运行以下命令:

brew postgresql-upgrade-database

(来源https://github.com/facebook/react-native/issues/18760#issuecomment-410533581


3
在这些情况下,/usr/local/var/log/postgres.log文件可能具有以下最后几个日志: FATAL: database files are incompatible with server DETAIL: The data directory was initialized by PostgreSQL version 11, which is not compatible with this version 12.2.
dijonkitchen

我有这个确切的问题。从postgresql 11升级到12失败,但是再次卸载和安装帮助完成了。
星期五

15

在这里,我将结合Wilson和Grasshopper的两个答案。

您可以通过brew services list查找文件位置来检查postgres服务的plist文件,然后在您喜欢的编辑器中将其打开。

您应该看到StandardErrorPath列出的值为:

<key>StandardErrorPath</key>
<string>/usr/local/var/log/postgres.log</string>

然后您应该使用以下命令在日志文件的末尾 tail -n 100 /usr/local/var/log/postgres.log

就我而言,错误如下:

2017-12-06 11:51:16.078 GMT [85476]致命:锁定文件“ postmaster.pid”已存在2017-12-06 11:51:16.078 GMT [85476]提示:是另一个正在运行的postmaster(PID 601)数据目录“ / usr / local / var / postgres”?

这是因为我不得不硬关闭Mac,而postgres没有机会清理PID文件。只需删除PID文件rm /usr/local/var/postgres/postmaster.pid并启动postgresbrew services start postgresql

提示:除非确定postgres没有运行,否则不要删除此PID文件。您可以通过运行brew services stop postgresql然后等待brew services listposgres处于停止状态的结果来执行此操作。



3

我从版本Tap安装postgresql93时遇到了同样的错误。检查brew services list~/Library/LaunchAgents/homebrew.mxcl.postgresql93.plist)输出中指示的.plist文件,我发现以下消息:

致命:数据目录“ / usr / local / var / postgres”具有组或世界访问权限
详细信息:权限应为u = rwx(0700)。

这导致了我这个答案:数据目录“ / usr / local / var / postgres”具有错误的所有权

运行后,sudo chmod -R 700 /usr/local/var/postgres我得到了另一个错误:

严重:无法打开目录“ pg_tblspc”:没有此类文件或目录

然后导致我:安装最新版本的OS X(Yosemite或El Capitan)后缺少pg_tblspc

运行后mkdir /usr/local/var/postgres/pg_tblspc/,群集成功启动。


1

使用命令更新它

  brew postgresql-upgrade-database

如果找不到 以下错误 命令“ brew”,但可以使用以下命令安装:sudo apt install linuxbrew-wrapper

然后使用命令安装

 sudo apt install linuxbrew-wrapper

1

如果您有多个版本的postgresql,则以下命令将执行删除pid并重新启动它的工作。只需确保选择正确的版本即可。

rm -f /usr/local/var/postgresql@9.6/postmaster.pid

brew services restart postgresql@9.6   

0

就我自己而言,postgres.log文件包含此内容HINT: Is another postmaster already running on port 5432? If not, remove socket file "/tmp/.s.PGSQL.5432" and retry.。删除套接字文件并重新启动后,一切正常。请注意,这是一个隐藏文件,不会通过窗口浏览器显示。删除应通过命令行完成。

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.