Postgres.app 无法在端口5432上启动。

74

我正在使用http://postgresapp.com。在菜单栏中,它显示错误消息" 无法在5432端口启动。"如果我尝试从终端启动服务器,我也会得到相同的错误信息:

psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

我也运行了pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start,并且得到了输出server starting,但是在连接psql时仍然遇到相同的错误。


1
我的第一个猜测是你的Mac上有其他东西占用了5432端口。默认情况下,psql不会使用该端口,而是使用套接字文件(/tmp/.s.PGSQL.5432),就像你提到的那样。你可以通过 psql -h localhost 强制使用该端口。尝试检查一些事情:1. 是否有其他东西正在使用5432端口。2. 检查你的postgres(操作系统)用户是否有权限在 /tmp/ 中创建文件。 - Philip Couling
1
我在 /tmp/ 目录下看到了一个 .s.PSQL.5433 的东西。我该如何将它更改为 5432? - Chris
1
我遇到了同样的问题。我认为这与苹果的专业应用程序更新有关,因为那是我所做的唯一更改,然后我开始收到这个错误。我尝试过卸载和重新安装postgresql;卸载和重新安装pg gem;以及其他一些配置调整,但没有结果。仍在努力解决,但希望很快能找到解决方案。如果我取得任何进展,我会让你知道的。 - Brian McDonough
1
在我的情况下,我正在运行连接到我的postgresql实例的dBeaver。 我进行了配置更改,然后点击“停止”和“启动”,但是惊讶地得到了“端口正在使用”的错误。 但是下面建议的“lsof -i:5432”显示dBeaver占用了该端口。 关闭dBeaver后,postgresql可以正常启动。 - Eric Hill
28个回答

90

如果您的服务器运行在 macOS 上并且通过 Homebrew 安装了 Postgres,您可以按照以下方式停止当前实例:

brew services stop postgresql

然后,单击位于屏幕顶部本地菜单栏中的大象图标即可成功启动。


1
菜单栏在哪里?:') - Kevin Upton
好的,你说得对!我已经澄清了我的意思是哪个菜单栏。谢谢! - Max von Hippel
2
@MaxvonHippel 非常感谢你,我的朋友,你真的让我开心了 :) - Yavuz Asmalı

75

你可以通过找到进程ID来停止该进程

lsof -i :5432

然后用XX来干掉它

(注:请将“XX”替换成具体的方法或工具名称)
kill -9 <PID>

2
这是适用于任何端口的最通用的方法。应该是最好的答案。 - mythicalcoder
2
当我杀死它时,它又以不同的PID运行。请帮忙。 - Tula
@Tula https://unix.stackexchange.com/questions/158194/kill-a-process-that-keeps-restarting - Некто
4
我尝试过这个方法,但它只会启动另一个PID。对我有效的方法是brew services stop postgresql - Adam Zarn

34

如果您是通过其他方式(例如从www.postgresql.org)安装了Postgres,并且它在启动时自动启动,您可以通过以下方法防止该Postgres启动:

如果您已经通过其他方法安装了Postgres(例如从www.postgresql.org),并且它在启动时自动启动,您可以通过以下方法防止该Postgres启动:

sudo launchctl unload /Library/LaunchDaemons/com.edb.launchd.postgresql-X.X.plist  
sudo rm -f /Library/LaunchDaemons/com.edb.launchd.postgresql-X.X.plist  

TIP: 使用tab键在com.edb.launchd后自动补全以确定加载的版本。

重新启动Postgres.app,然后您应该可以使用了。

(来自http://forums.enterprisedb.com/posts/list/1831.page;jsessionid=70621DC48C99EDE663A6A594B05F1A02#6782)


非常感谢。这对我起作用了。问题是每当我杀掉在5432上监听的进程时,它就会重新启动。再次感谢。 - Abdellah Stands with Palestine
救命稻草(需要更多的话来评论):D - Kohls

24
我遇到了和你一样的问题。运行 which psql 命令时,它指向 Lion 安装的 Postgres 客户端工具:/usr/bin/psql
借鉴自Frank Wiles的提示,我运行了 ps auxw | grep post 来确认 postgres 是否在运行并且是否在正确的端口上,这也显示了 postgres.app 的路径:/Applications/Postgres.app/Contents/MacOS/bin/postgres
因此,我编辑了我的 .bash_profile 文件,将该目录导出。起初,我将其添加到路径的末尾。当我运行 echo $PATH 时,我发现 usr/bin 是路径中的第一个内容,而 which psql 仍然给出 /usr/bin 路径。那时,一个朋友引导我走向正确的方向: export PATH="/Applications/Postgres.app/Contents/MacOS/bin:${PATH}" 打开一个新的终端窗口,然后运行 which psql -- 它应该指向 postgres.app 的位置,并且 psql 应该能够启动postgres shell。现在可以正常工作了。

对于9.3版本,我的路径是export PATH="/Applications/Postgres93.app/Contents/MacOS/bin:${PATH}"。 - LennonR

22
这个命令是一行代码,可以立即终止所有的PostgresSQL进程。
sudo kill -kill $(sudo lsof -t -i :5432)

这解决了我在Mac OSX Mojave 10.14.1上的所有问题。

1
我很后悔运行了这个命令,我把整个PostgreSQL都弄挂了,现在无法启动。 - Billions.A.Joel
这很危险。您不想杀死基础系统Postgres。 - Reverse Engineered

18

我尝试了所有能找到的解决方法,对于我来说,只要我的MacBook电池耗尽,即使计算机已经睡眠,这个问题就会一直发生。我在~/Library/Application\ Support/Postgres/var-9.4里搜寻时发现了另一个我之前从未见过的postmaster.pid文件。我删除了它,现在一切都恢复正常了!我使用的是Postgres.app版本而不是brew版本。

我采取的步骤:

  1. 确保postgres.app未运行。
  2. 运行rm ~/Library/Application\ Support/Postgres/var-9.$X/postmaster.pid
  3. 如果您没有var-9.$X目录,只需运行rm ~/Library/Application\ Support/Postgres/postmaster.pid
  4. 重新启动postgres.app
  5. 回到开发酷炫东西的状态。

我曾经遇到过同样的问题。这个答案解决了我的问题。关键是确保系统无法读取postmaster.pid文件。通过使用rm删除它或者仅通过mv重命名它都可以。我更喜欢将其重命名为postmaster.pid.problem-cause。由于人们的安装设置不同,因此找到那个讨厌的文件的最佳方法是检查PosgtreSQL日志。 - Abel Callejo

18

你可能有另一个正在运行的Postgres实例,那是唯一对此端口感兴趣的应用程序。您应该使用netstat和ps命令来确定这一点。然后停止该实例并卸载它,您可能已经安装了EnterpriseDB,例如,这就是我所做的。


1
在我的情况下,这只是在安装PostGreSQL在MacOSX上几天后随机发生。然后我重新安装一切正常,然后再过几天,它又显示相同的错误。我想澄清的是,我从未更改过PostGreSQL的根密码。请帮忙。 - zulkarnain shah

10

我通常在我的Mac上遇到这个问题,而这个解决方法总是有效的

rm /usr/local/var/postgres/postmaster.pid
brew services restart postgresql

希望这有所帮助


9

我曾遇到一个类似的问题,即使Postgres.app本身显示它在5432端口上运行,但我无法连接。我不确定为什么,即使我退出应用程序并使用ps -a检查没有postgres进程在运行,这些文件仍然存在:

/tmp/.s.PGSQL.5432

并且

/tmp/.s.PGSQL.5432.lock

我的解决方案是删除这些文件,然后重新启动postgres.app。

1
这个对我的问题有帮助。除非删除 /tmp 文件有某种危险,否则我不确定为什么其他人会对此答案进行投票。 - jurassic
2
一开始看到那些文件通过 su(超级用户)并删除它们时,我感到很兴奋,但是没有成功。 - Crimbo
我尝试了 "brew services stop postgresql" 然后删除了 /tmp/.s.PGSQL.5432.lock。 - HibernatedGuy

9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接