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

时间:2012-11-26 21:09:53

标签: macos postgresql

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

25 个答案:

答案 0 :(得分:348)

警告:如果删除postmaster.pid而不确定没有任何postgres进程在运行,可能会永久损坏您的数据库。 (PostgreSQL应该在postmaster退出时自动删除它。)。

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

/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. 根据错误消息中的建议,我将postmaster.pid文件删除到与server.log相同的目录中。这解决了这个问题,我可以重新启动。

  5. 所以,似乎我的macbook冻结并且被重新启动导致Postgres认为即使重启后它的进程仍在运行。删除此文件已解决。希望这有助于他人!很多人都有类似的问题,但大多数答案都与文件权限有关,而在我的情况下,情况则有所不同。

答案 1 :(得分:104)

以上都不适合我。我必须通过以下方式重新安装Postgres:

  • 使用brew:brew uninstall postgresql
  • 卸载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

答案 2 :(得分:71)

如果您使用的是macOS并通过自制程序安装postgres,请尝试使用

重新启动它
brew services restart postgresql

如果您使用的是Ubuntu,可以使用其中一个命令

重新启动它
sudo service postgresql restart

sudo /etc/init.d/postgresql restart

答案 3 :(得分:15)

也许这无关紧要,但是当您使用postgresbrew升级到主要版本时,会出现类似的错误;使用brew info postgresql发现了以下帮助:

To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database

答案 4 :(得分:9)

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

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

答案 5 :(得分:9)

如果您的postmaster.pid已经消失且您无法重启或其他任何事情,请执行以下操作:

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

最初解释here

答案 6 :(得分:8)

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

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

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

export PATH=/Applications/Postgres93.app/Contents/MacOS/bin/:$PATH
这是来自psql的{​​{1}}的路径。每次启动控制台时都会运行行(命令)。

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

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

5)此外,如果您想以图形方式查看数据库,则应安装Postgres93.app。这是将postgres DB视为漂亮的数据表

的好方法

当然,它仅对本地服务器有用。如果这些指示可以帮助那些遇到这个问题的人,我将很高兴。

答案 7 :(得分:7)

这个问题有很多来源,因而有很多答案。我经历过他们中的每一个。

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

2)Craig Ringer在其他帖子中指出,Apple捆绑的postgreSQL导致pg gem installation issues设置PATH环境变量是一种解决方案。

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

如果您偶然发现这篇文章,如果您能确定其中一个来源,那么您将节省时间......

答案 8 :(得分:5)

我在这里遇到了类似的问题,我解决了这个问题如下。

实际上postgres进程已经死了,看看postgres的状态运行以下命令

sudo /etc/init.d/postgres status

它会说过程已经死了。只需启动过程

sudo /etc/init.d/postgres start

答案 9 :(得分:4)

在我的Mac(High Sierra)冻结之后发生这种情况,我不得不手动重启(按住电源按钮)。我需要做的就是彻底重新启动它。

答案 10 :(得分:3)

这是我的方式:

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

答案 11 :(得分:3)

我的问题最终是我正在使用防毒面具(Mac的主机文件管理器),而我在我使用的主机文件中没有localhost条目。

我补充说:

127.0.0.1 localhost

这解决了我的问题。

答案 12 :(得分:2)

发生这种情况的另一类原因是由于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

(奇怪的是,它在运行1上失败,在运行2上工作,因此在放弃之前请尝试两次)

答案 13 :(得分:2)

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

答案 14 :(得分:1)

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

/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,终于可以了!

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

答案 15 :(得分:1)

我遇到了同样的问题,这是由于从版本 11 升级到 13.2 后版本不兼容

正在检查错误日志:

/usr/local/var/log/postgres.log

给我看了:

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

为了修复我跑了:

brew postgresql-upgrade-database

然后用 brew 启动 postresql:

brew services start postgresql

答案 16 :(得分:1)

psql (PostgreSQL) 9.6.11我也遇到了同样的问题。

对我有用的东西-

删除postmaster.pid-rm /usr/local/var/postgresql@9.6/postmaster.pid

重新启动postgres-brew services restart postgresql@9.6

如果postmaster.pid不存在或以上过程不起作用,请运行-

sudo chmod 700 /usr/local/var/postgresql@9.6

答案 17 :(得分:1)

我不完全确定原因,但是我的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文档对我帮助很大。我讨厌阅读类似于#34的答案;将其粘贴在其中有效!&#34;因为我不知道到底发生了什么,为什么。

答案 18 :(得分:0)

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

答案 19 :(得分:0)

经过一些搜索,发现了一个类似的问题,并为我提供了一个简单的答案,该方法有效: 只需“使用以下命令将现有版本升级到较新版本”即可:

brew postgresql-upgrade-database

感谢ssamateh对此related topic的回答

答案 20 :(得分:0)

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

brew upgrade brew cleanup 这应该工作;)

答案 21 :(得分:0)

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

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

$ top

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

$ kill pid_number

答案 22 :(得分:0)

我遇到了同样的问题,因为我把我的机器(ubuntu)更新并得到以下错误:

  

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

完成更新过程后,当我重新启动系统错误消失了。它的工作就像以前的魅力一样..我猜这是因为pg正在更新而另一个流程开始了。

答案 23 :(得分:0)

@Jagdish Barabari的回答给了我解决这个问题的线索。原来有两个版本的postgresql安装,只有一个正在运行。清除所有postgresql文件并重新安装最新版本为我解决了这个问题。

答案 24 :(得分:0)

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