Postgres.app端口已被占用。

11
我正在尝试启动服务器,但出现了错误。
Port 5432 is already in use

我已经使用brew卸载了PostgreSQL。
which postgres

我得不到任何东西。

活动监视器有14个无法终止的Postgres进程。 强制退出会杀死该进程并重启另一个PID。 同样适用于 sudo kill -9 PID 它会杀死该进程并使用另一个PID重新启动。

7个回答

28

如果您在OSX上遇到此问题,请执行以下操作:

  1. 查找在该端口上运行的内容:
    $ lsof -n -i4TCP:5432

    COMMAND     PID         USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
    python2.7 28687 afdasdfasd    3u  IPv4 0x2f18e1284963d3e3      0t0  TCP 127.0.0.1:54970->127.0.0.1:postgresql (CLOSE_WAIT)
  1. 结束它
    $ kill -9 28687
  1. 重新启动postgresapp

命令 lsof -n -i4TCP:5432 对我很有帮助,在OSX上,"netstat"没有显示端口5432的任何内容。谢谢! - leo
这个方法对我也起作用了。在我的情况下,我发现我正在使用DataGrip,即使PostgreSQL已经停止运行,它似乎仍然保持着端口的使用。 - Oscar Calderon

22

你是否检查了启动守护程序?如果使用Homebrew安装Postgres,它将控制Postgres进程,自动在其被杀死后重新启动。请尝试:

sudo launchctl list
或者
sudo launchctl list | fgrep postg

查找守护程序的名称。您可以使用sudo launchctl stop <name>来停止守护程序,其中name取决于第一个命令的结果。


18

OP在MacOS下运行Postgres(“Activity Manager”是一个非常微妙的提示),使用Homebrew包。 Homebrew使用launchctl启动和停止Postgres。如果您使用kill停止Postgres,它将由launchctl重新启动。 OP已经尝试过您的解决方案,但没有成功。 - clemens
1
好的,但我来到这个问题是因为我需要一个答案,并且没有明确提到homebrew。所以对于其他寻求帮助的人来说,我的解决方案可能更合适。 - tread
谢谢!这节省了我很多时间 :) - Smolin Pavel

11

$ brew services stop postgresql

这将终止所有进程并让您启动服务器。


3

您可以使用以下命令获取端口列表:

sudo launchctl list

然后输入应用程序名称,使用该命令获取端口号:

sudo launchctl list | fgrep postg

在我的情况下,端口是83。现在使用:

kill 83

那么

sudo kill 5432

0
运行这些命令
  • 检查端口5432上正在运行的内容 - $ sudo lsof -i :5432
  • 关闭Postgres - $ sudo pkill -u postgres

-1
使用这个:
brew services stop postgresql

祝你好运!


此解决方案已经在此现有答案中提供。回答老问题时,请确保您的答案为Q&A提供了独特和有价值的贡献。 - snakecharmerb

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