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


当前回答

警告:如果您删除postmaster。Pid,而不确定是否真的有postgres进程在运行你,可能会永久破坏你的数据库。(PostgreSQL应该自动删除它,如果postmaster已经退出。)

解决方案:这解决了问题——我删除了这个文件,然后一切工作!

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

--

这就是我是如何发现为什么这个需要删除的。

我使用以下命令查看是否有任何PG进程正在运行。对我来说,没有,我甚至无法启动PG服务器: Ps auxw | grep post 我搜索了. s.p gsql文件。5432在上面的错误消息中。我使用了以下命令: sudo find / -name . s.p gsql。5432 - ls

在搜索了我的整个计算机后,这没有显示任何东西,所以文件不存在,但显然PSQL“想要它”或“认为它在那里”。

我看了一下我的服务器日志,看到了以下错误: 猫/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".

按照错误消息中的建议,我删除了邮政局长。Pid文件与server.log在同一目录下。这解决了问题,我可以重新启动。

所以,似乎我的macbook被冻结和硬重启导致Postgres认为它的进程在重启后仍在运行。删除此文件已解决。很多人都有类似的问题,但大多数答案都与文件权限有关,而我的情况则不同。

其他回答

以上这些方法对我都没用。我必须以以下方式重新安装Postgres:

使用brew卸载postgresql 酿造医生(修复这里的任何东西) 啤酒清理 删除所有Postgres文件夹: Rm -r /usr/local/var/postgres rm -r ~/库/应用\支持/Postgres . txt 使用brew重新安装postgresql 启动服务器:brew服务启动postgresql 你现在必须创建你的数据库…(createdb)

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

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

美元上

这将显示当前运行的所有操作及其pid编号。当你找到postgres和相关的pid

杀死pid_number美元

这个问题有很多来源,因此也有很多答案。每一次我都经历过。

1)如果你有某种类型的崩溃,删除/usr/local/var/postgres/postmaster。Pid文件可能是必需的,因为postgres可能没有正确处理它。但是确保没有进程正在运行。

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

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

如果你偶然发现了这篇文章,如果你能找到其中一个来源,你将节省时间……

这是我的方法:

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

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

尽管我能够运行像brew service restart postgres这样的命令并看到正确的消息,但这个错误仍然存在。

我浏览了postgres文档,发现我的文件/usr/local/var/postgres完全是空的。所以我运行了以下程序:

initdb /usr/local/var/postgres

这个命令似乎发生了一些配置。

然后它让我运行这个:

postgres -D /usr/local/var/postgres

这告诉了我一个邮政局长。Pid文件已经存在。

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

ls /usr/local/var/postgres

这让我想到了邮政局长。pid文件。然后我做了brew服务停止postgresql,和postmaster。Pid文件消失。然后我做了brew服务启动postgresql和VIOLA,文件重新出现。

然后我继续运行我的应用程序,它确实找到了服务器,但我的数据库似乎消失了。

尽管我知道它们可能根本没有消失——我所做的新的初始化可能创建了一个新的data_area,而旧的data_area没有被指向。我必须看看它在哪里,并把它点回来,或者只是重新创建我的数据库。

希望这能有所帮助!阅读postgres的文档对我帮助很大。我讨厌看到类似于“粘贴这个就可以了!”这样的答案,因为我不知道到底发生了什么,为什么会这样。