psql: 无法连接到服务器:没有这样的文件或目录(Mac OS X)

307

重新启动我的 Mac 后,我遇到了可怕的 Postgres 错误:

psql: could not connect to server: No such file or directory
 Is the server running locally and accepting
 connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
这种情况发生的原因是我的MacBook由于一个不相关的问题完全冻结了,我不得不使用电源按钮进行强制重启。 重启后,我无法启动Postgres,因为出现了这个错误。

这种情况发生的原因是我的MacBook由于一个不相关的问题完全冻结了,我不得不使用电源按钮进行强制重启。重启后,我无法启动Postgres,因为出现了这个错误。


3
请确保您的计算机上已运行PG,以进行一次常识检查。 - Jbur43
1
请在回答时尝试解释为什么会发生这种情况,或者Postgres系统是如何工作的,这样我们就不会只是随意尝试了。 - Nick Res
11
brew reinstall postgresql 对我有用,参考自 https://dev59.com/tGEi5IYBdhLWcg3wN6Jt#39781473。 - Derk Jan Speelman
重新安装PostgreSQL,这解决了我的问题。 - Ajay Kumar
29个回答

481

警告: 如果您在确保没有任何正在运行的postgres进程的情况下删除postmaster.pid文件,可能会永久损坏数据库。(如果postmaster已退出,则PostgreSQL应自动删除它。)

解决方法:我删除了这个文件,然后一切都正常了!

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

--

这就是我找出为什么需要删除它的方法。

  1. 我使用了以下命令来查看是否有任何PG进程正在运行。 对我来说没有,我甚至无法启动PG服务器:

    ps auxw | grep post
    
  2. 我搜索了出现在上面错误信息中的文件.s.PGSQL.5432。我使用了以下命令:

  3. sudo find / -name .s.PGSQL.5432 -ls
    

在整个电脑上搜索后,未显示任何内容,因此该文件不存在,但是显然psql“想要”或“认为它在那里”。

  1. 我查看了我的服务器日志,并看到以下错误:

cat /usr/local/var/postgres/server.log

在服务器日志的末尾,我看到了以下错误:

    FATAL:  pre-existing shared memory block (key 5432001, ID 65538) is still in use
    HINT:  If you're sure there are no old server processes still running, remove the shared memory block or just delete the file "postmaster.pid".
  1. 按照错误信息的建议,我删除了与server.log文件位于同一目录下的postmaster.pid文件。这解决了问题,我成功地重新启动了服务。

因此,我的Macbook冻结并进行硬重启后,Postgres认为其进程仍在运行。删除此文件解决了问题。许多人遇到了类似的问题,但大多数答案都与文件权限有关,而在我的情况下则不同。


11
希望我的回答能帮助到其他人,感谢给我点赞的人。虽然管理员把这个问题标记为重复的,但它是独特且有用的。感谢 Stack Overflow 提供了如此棒的网站,以及在这里分享知识的专家们! - FireDragon
2
仅供参考,删除postmaster.pid是危险的,你必须确保在执行此操作之前没有任何“postgres”进程在运行。 - Craig Ringer
29
好的答案,感谢您发布整个过程,而不仅仅是可能具有破坏性的命令! - Doug Johnston
4
同意。关于postmaster.pid的答案很好,但是找出是否/在哪里运行postgres的每个步骤都是无价之宝。谢谢! - Clinton
14
我在 macOS 上的 Postgres 日志位于 /usr/local/var/log/postgres.log - ryantuck
显示剩余2条评论

232

对我来说以上方法都没有起作用。我不得不按照以下方式重新安装Postgres:

  • 使用brew卸载postgresql: brew uninstall postgresql

  • brew doctor(修复其中的任何问题)

  • brew cleanup

  • 删除所有Postgres文件夹:

  • rm -r /usr/local/var/postgres

  • rm -r ~/Library/Application\ Support/Postgres

  • 使用brew重新安装postgresql:brew install postgresql

  • 启动服务器:brew services start postgresql

  • 现在你需要创建你的数据库...(createdb


5
对我有用,但我不需要移除实际数据库,也没有在应用程序支持文件夹中。我认为重点是在安装postgres时,一些brew元素已经破坏了符号链接。修复它们并再次安装postgres解决了问题。谢谢! - Kulbi
5
直到我运行了 brew postgresql-upgrade-database,这两个答案对我都没有用。 - ErikAGriffin
这些对我有用,除了我不必删除旧数据。 - Amal Antony
@JacobFord,你是在说brew reinstall postgresql不会清除你的数据库吗? - bplittle
谢谢!虽然有点老,但仍是经典! - iamkdblue
显示剩余3条评论

100

如果你使用 homebrew 在 macOS 上安装了 postgres,请尝试使用以下命令重新启动:

brew services restart postgresql

如果您使用的是Ubuntu操作系统,您可以使用以下任一命令之一来重新启动它:

sudo service postgresql restart

sudo /etc/init.d/postgresql restart

46
或许这不是相关的,但当你使用brew升级postgres到一个新版本时,会出现类似的错误;通过使用 "brew info postgresql" 命令可以找到以下信息来解决问题:
To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database

4
在Catalina上,我通过这种方法从11升级到12成功。 - nzajt
1
也对我起作用了。 - Petercopter

29

这是我的方法:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm /usr/local/var/postgres/postmaster.pid
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

1
这对我很有用,当使用homebrew时,没有其他停止、启动/重新启动/重新安装Postgres。感谢@smartworld-dm。 - Bradley
1
这是我总是回来使用的解决方案。 我可能会添加一个别名,当我运行 fix-my-postgresql 时它将执行这个 :) - Tomas K
1
每次我重启电脑都要这样做的原因是什么? - stephano
2
类似但不同 :) brew services stop postgresql; rm /usr/local/var/postgres/postmaster.pid; brew services start postgresql - Roger Heathcote

13

以下命令帮助了我。问题出在 PostgreSQL 数据版本上。升级后,它对我来说开始正常工作。

brew upgrade postgresql
brew postgresql-upgrade-database
brew services restart postgresql

1
惊讶!!!我刚刚在我的MAC OS上安装了postgresql,但连接时失败了。当我将其作为服务启动时,postgresql没有在后台运行,但是在执行这些命令之后,一切都完美地运行了。 - Tejas Tank
1
^^^这个序列对我很有帮助,是截至2021年6月适用于macOS的工作解决方案。感谢@satendra-rawat的记录!如果这不起作用,可能是一个过时的PID,那么我会尝试@smartworld-dm的上面的解决方案 - frostini
只需运行 brew upgrade postgresql@VERSION,我就完成了,其中 VERSION=11 等。 - Jonathan Lin

12

如果您的 postmaster.pid 文件已丢失,导致无法重新启动或执行其他操作,请执行以下步骤:

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

这里有一个相关的解释


我解决了!在删除了 postmaster.pid 文件并重新启动 postgres 后,它没有再次创建。我运行了这个命令,文件被重新创建了,现在我可以再次连接到数据库了。谢谢! - undefined

9

对我来说,解决方案就是重新启动我的电脑。我首先尝试了使用Brew服务进行重启,但当这种方式无效时,重新启动似乎是下一个最好的尝试选项,然后再去考虑一些更复杂的解决方案。之后所有的东西都按照应该的方式运行了。


9
另一个可能导致这种问题发生的原因是Postgres版本更新。您可以通过查看Postgres日志来确认这是否是一个问题:
tail -n 10000 /usr/local/var/log/postgres.log

并查看类似以下条目:

DETAIL:  The data directory was initialized by PostgreSQL version 12, which is not compatible with this version 13.0.

如果您正在使用Mac并且使用brew,那么只需运行以下命令:

brew postgresql-upgrade-database

(奇怪的是,第一次运行失败了,第二次却成功了,所以在放弃之前请尝试两次。)

这对我有用,我也不得不运行它两次 - 第一次使用原始错误失败:服务器在本地运行并接受Unix域套接字“/usr/local/var/log/.s.PGSQL.50432”的连接吗?但第二次运行它就可以了 ¯\_(ツ)_/¯ - ea0723

8

你好世界 :)
对我来说最好但奇怪的方法是这样做。

1) 下载postgres93.app 或其他版本。将此应用程序添加到/Applications/文件夹中。

2) 在我的主目录中的文件.bash_profile中添加一行(命令):

export PATH=/Applications/Postgres93.app/Contents/MacOS/bin/:$PATH
这是从Postgres93.apppsql到路径。这行(命令)会在每次启动控制台时运行。

3)/Applications/文件夹启动Postgres93.app。它启动了一个本地服务器(端口为“5432”,主机为“localhost”)。

4) 所有这些操作后,我很高兴运行$ createuser -SRDP user_name 和其他命令,并看到它可以工作!Postgres93.app可以设置为在系统启动时运行。

5) 此外,如果你想以图形方式查看数据库,你应该安装PG Commander.app。这是查看你的postgres DB作为漂亮数据表格的好方法。

当然,这只对本地服务器有用。如果这些说明对其他遇到此问题的人有所帮助,我会很高兴。


1
关键在于将Postgres添加到您的路径中(步骤2)。这对我有帮助。如果您使用Homebrew安装了Postgres,则可以通过将以下行添加到您的.bash_profile来将其添加到您的路径中:export PATH='/usr/local/Cellar/postgresql/9.4.1/bin/':$PATH - 请注意,您的版本号可能不同。 - Tina

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