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


247

重新启动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。


1
作为健全性检查,请确保您的计算机上已运行PG
Jbur43

1
当您留下答案时,请尝试解释为什么会这样,或者解释Postgres系统是如何工作的,因此我们不只是尝试随机的东西。
Nick Res

6
brew reinstall postgresql stackoverflow.com/a/39781473/6086226为我工作
Derk Jan Speelman,

brew重新安装postgresql,这解决了我的问题
Ajay Kumar

Answers:


420

警告:如果删除postmaster.pid而不确保确实没有postgres进程在运行,则可能会永久损坏数据库。(如果邮局主管已经退出,PostgreSQL应该自动将其删除。)。

解决方案:这解决了问题-我删除了此文件,然后一切正常!

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

--

这就是我弄清楚为什么需要删除它的方式。

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

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

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

    搜索完我的整个计算机后,该文件未显示任何内容,因此该文件不存在,但显然psql“希望它”或“认为它已存在”。

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

    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".
    
  4. 按照错误消息中的建议,我在与server.log相同的目录中删除了postmaster.pid文件。这解决了问题,并且我能够重新启动。

因此,似乎我的Macbook死机并被重新引导后,使Postgres认为它的进程即使在重新引导后仍在运行。解决了删除该文件的问题。希望这对别人有帮助!很多人都有类似的问题,但大多数答案与文件权限有关,而在我看来,情况却有所不同。


9
希望这个答案最终能帮助其他人,并感谢提出支持的人。尽管主持人将该问题标记为重复,但它是唯一且有用的。感谢堆栈溢出为真棒网站和这里的专家分享!
FireDragon 2012年

2
只是FWIW,删除postmaster.pid是危险的,你得要真正确保没有postgres运行,你做它之前的过程。
Craig Ringer 2013年

20
好答案。感谢您发布整个过程,而不仅仅是发布可能造成破坏的命令!
dojosto

3
同意 关于postmaster.pid的答案很好,但是弄清楚postgres是否在哪里运行的过程的每一步都是无价的。谢谢!
克林顿

10
我在macOS上的postgres登录位于/usr/local/var/log/postgres.log
瑞安·塔克

170

以上都不对我有用。我必须通过以下方式重新安装Postgres:

  • 用brew卸载postgresql: brew uninstall postgresql
  • brew doctor (修复这里的所有内容)
  • brew cleanup
  • 删除所有Postgres文件夹:

    • rm -r /usr/local/var/postgres
    • rm -r /Users/<username>/Library/Application\ Support/Postgres
  • 用brew重新安装postgresql: brew install postgresql

  • 启动服务器: brew services start postgresql
  • 您现在必须创建数据库...(createdb

4
为我工作,但是我不必删除实际的数据库,并且在应用程序支持中没有文件夹。我认为关键是在安装postgres时,某些brew元素已损坏符号链接。修复它们并安装postgres再次解决了该问题。谢谢!
库尔比

2
这个答案或最佳答案都对我没有用,直到我还参加了brew postgresql-upgrade-database
比赛

这些对我有用,除了我不必删除旧数据。
阿玛尔安东尼

确认:这将删除您的所有数据库,对吗?我只用了一个即可brew reinstall postgres,确认最新的Homebrew Postgres主版本号与我当前的(断号)相同。
雅各布·福特

85

如果您使用的是macOS,并通过自制软件安装了postgres,请尝试使用重新启动它

brew services restart postgresql

如果您使用的是Ubuntu,则可以使用以下任一命令将其重新启动

sudo service postgresql restart

sudo /etc/init.d/postgresql restart

34

也许这无关紧要,但是当您使用升级postgres到主要版本时,会出现类似的错误brew。使用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
也为我工作
凌晨

15

这是我的方式:

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

1
当没有使用自制软件停止和启动/重新启动/重新安装Postgres时,这对我有用。感谢@ smartworld-dm
Bradley

1
这是我一直回到的灵魂。我可能会添加一个别名,当我运行fix-my-postgresql它时将执行此:)
Tomas K

1
知道为什么每次重启PC都必须这样做吗?
stephano

11

如果您postmaster.pid不见了又无法重启或执行任何操作,请执行以下操作:

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

如最初在这里解释的


8

你好,世界:)
对我来说,最好的但奇怪的方法是做下一件事情。

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

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

导出PATH = / Applications / Postgres93.app / Contents / MacOS / bin /:$ PATH
这是psql从的路径Postgres93.app。该行(命令)在每次启动控制台时运行。

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

4)在完成所有这些操作之后,我很高兴运行$ createuser -SRDP user_name命令和其他命令,并看到它起作用了!Postgres93.app可以在系统每次启动时运行。

5)另外,如果您想以图形方式查看数据库,则应安装PG Commander.app。这是将Postgres DB视为漂亮的数据表的好方法

当然,它仅对本地服务器有用。如果本说明可以帮助遇到此问题的其他人,我将感到很高兴。


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

7

这个问题有很多来源,因此有很多答案。我经历了他们每个人。

1)如果您遇到了某种崩溃,则可能需要删除/usr/local/var/postgres/postmaster.pid文件,因为postgres可能无法正确处理它。但是,请确保没有任何进程在运行。

2)Craig Ringer在其他文章中指出,苹果对postgreSQL的捆绑导致了pg gem安装问题。 设置PATH环境变量是一种解决方案。

3)另一个解决方案是卸载并重新安装gem。冲泡更新也可能是必需的。

如果您偶然发现了这篇文章,那么如果您可以找到其中一个消息源,则可以节省时间...


3
我很高兴我张贴了这个。另一个崩溃和答案可以很快恢复……
Jerome

6

对我而言,解决方案就是重新启动计算机。我首先尝试使用Brew服务重新启动,但在这种方法不起作用时,重新启动似乎是尝试研究一些更复杂的解决方案之前的下一个最佳选择。一切都按预期进行。


5

我在这里遇到了类似的问题,如下所示。

实际上postgres进程已死,要查看postgres的状态,请运行以下命令

sudo /etc/init.d/postgres status

它会说这个过程已经死了,只要开始这个过程

sudo /etc/init.d/postgres start

谢谢您的回答,您的回答通过一些修改帮助我解决了同一问题:sudo /etc/init.d/postgresql start
Pravitha V

4

Mac(High Sierra)冻结后,这发生在我身上,我不得不手动重新启动它(按住电源按钮)。我要做的就是修复干净的重启。


3

我的问题最终是我使用的是Gas Mask(Mac的主机文件管理器),而我使用的主机文件中没有localhost的条目。

我补充说:

127.0.0.1 localhost

这就解决了我的问题。


3

我不完全确定为什么,但是我的Postgres安装有点搞砸了,并且删除了一些文件,导致OP显示错误。

尽管我能够运行类似的命令brew service retart postgres并查看正确的消息,但该错误仍然存​​在。

我浏览了postgres文档,发现我的文件/usr/local/var/postgres完全为空。因此,我运行了以下命令:

initdb /usr/local/var/postgres

似乎某些配置是使用该命令进行的。

然后它要求我运行此命令:

postgres -D /usr/local/var/postgres

那告诉我一个postmaster.pid文件已经存在。

我只需要知道brew是否能够获取我刚运行的配置,所以我对其进行了测试。

ls /usr/local/var/postgres

那显示了一个postmaster.pid文件。然后我做了brew services stop postgresql,postmaster.pid文件消失了。然后我做了brew services start postgresql,并且VIOLA,该文件重新出现。

然后我继续运行我的应用程序,实际上找到了服务器,但是我的数据库似乎不见了。

尽管我知道它们可能根本不会消失-我所做的新初始化可能创建了一个新的data_area,而旧的则没有指向。我必须查看其位置,然后将其重新指向,或者只是再次创建数据库。

希望这可以帮助!阅读postgres文档对我有很大帮助。我讨厌阅读“将其粘贴有效!”之类的答案。因为我不知道到底发生了什么,为什么。


2

导致此错误的原因很多,因此请首先找到您的日志文件并检查其线索。这可能是在/usr/local/var/log/postgres.log/usr/local/var/postgres/server.log或可能在其他地方。如果您安装了Homebrew,则可以在中找到该位置~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist


2

我遇到过同样的问题。大多数情况下,问题在于存在一个剩余文件

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

它对大多数人都有效,但我的情况有所不同-我尝试在过去3个小时中使用Google搜索该问题,通过brew卸载了OSX上的postresql,清除了数据库,但没有任何效果。

最终,我注意到brew出现问题,每当我尝试安装任何东西时,它都会弹出:

Error: Permission denied @ rb_sysopen - /private/tmp/github_api_....

或安装结束时类似的内容。

我只是做了sudo chmod -R 777 /private/tmp,它终于成功了!

我写下来是因为这可能是其他人的解决方案


1

转到/var/log/ 并运行cat postgres.log 在这里,您将找到postgres失败的原因。如果是智能关机,则可能是与您的icu4c版本(用于Unicode的C ++库)不正确的链接postgres。因此,运行以下命令。

brew upgrade brew cleanup 这应该工作;)


brew style如果brew cleanup中断Homebrew ,则可能必须随后运行。
奥利朱

0

为了解决这个问题,我不得不多次查看这篇文章。还有另一个修复程序,也将适用于其他正在运行的程序的类似问题。

我刚刚发现您可以使用以下两个命令。

$ top

这将显示所有当前正在运行的动作及其pid号。当您找到postgres和相关的pid

$ kill pid_number


0

我刚遇到将我的machine(ubuntu)更新并出现以下错误的问题:

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

重新启动完成更新过程后,系统错误消失了。它的工作像以前一样很吸引人。我猜这是在pg更新和另一个过程开始时发生的。


0

SUPER NEWBIE ALERT:我只是在学习Web开发和我正在遵循的特定教程,我必须安装Postgres,但实际上并没有提及我也必须运行它...打开Postgres应用程序后,一切都很好,并且花花公子。


0

@Jagdish Barabari的回答为我提供了解决此问题所需的线索。原来只有两个运行时安装了两个版本的postgresql。清除所有postgresql文件并重新安装最新版本对我来说解决了这个问题。


0

我从LD_LIBRARY_PATH中删除了/ usr / lib,它起作用了。我在dockerfile postgres:alpine中工作。

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.