298

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

4

27 回答 27

471

警告:如果您删除 postmaster.pid 而不确保确实没有postgres进程在运行您,可能会永久损坏您的数据库。(如果 postmaster 已经退出,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 认为即使在重启后它的进程仍在运行。删除此文件已解决。希望这对其他人有帮助!很多人都有类似的问题,但大多数答案都与文件权限有关,而在我的情况下情况有所不同。

于 2012-11-26T21:09:53.373 回答
226

以上都不适合我。我必须通过以下方式重新安装 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)

于 2017-10-27T09:30:34.320 回答
98

如果您在 macOS 上并通过自制软件安装了 postgres,请尝试使用以下命令重新启动它

brew services restart postgresql

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

sudo service postgresql restart

sudo /etc/init.d/postgresql restart
于 2015-06-15T09:12:50.037 回答
46

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

To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
于 2018-07-31T10:52:22.530 回答
29

这是我的方式:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm /usr/local/var/postgres/postmaster.pid
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
于 2019-09-17T12:16:30.980 回答
13

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

brew upgrade postgresql
brew postgresql-upgrade-database
brew services restart postgresql
于 2021-01-27T04:09:32.107 回答
11

如果你postmaster.pid走了,你不能重新启动或任何事情,这样做:

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

正如这里最初解释的那样

于 2017-12-05T01:00:55.693 回答
9

对我来说,解决方案就是重新启动我的电脑。我首先尝试使用 Brew 服务重新启动,但当它不起作用时,重新启动似乎是在研究一些更复杂的解决方案之前尝试的下一个最佳选择。之后一切正常。

于 2017-05-08T04:47:35.783 回答
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

(奇怪的是,它在运行 1 上失败并在运行 2 上工作,所以在放弃之前尝试了两次)

于 2020-11-13T09:53:39.183 回答
8

Hello world :)
对我来说最好但奇怪的方法是做接下来的事情。

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

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

导出 PATH=/Applications/Postgres93.app/Contents/MacOS/bin/:$PATH
这是一个 PATH 到psqlfrom Postgres93.app。每次启动控制台时都会运行该行(命令)。

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

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

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

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

于 2014-02-01T20:38:22.647 回答
7

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

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

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

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

如果你偶然发现这篇文章,如果你能查明其中一个来源,你会节省时间......

于 2014-03-11T08:53:50.070 回答
5

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

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

sudo /etc/init.d/postgres status

它会说这个过程已经死了`只需启动这个过程

sudo /etc/init.d/postgres start
于 2015-05-13T10:05:39.840 回答
4

这发生在我的 Mac(High Sierra)死机后,我不得不手动重新启动它(按住电源按钮)。我所要做的就是彻底重启。

于 2017-10-20T15:45:13.087 回答
4

我遇到了同样的问题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

于 2020-10-05T07:00:05.023 回答
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 文档对我帮助很大。我讨厌阅读诸如“将其粘贴进去!”之类的答案。因为我不知道到底发生了什么以及为什么。

于 2018-06-04T15:24:25.563 回答
3

我有同样的问题,这是由于从版本 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
于 2021-04-18T08:17:58.163 回答
3

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

我补充说:

127.0.0.1 localhost

这解决了我的问题。

于 2015-07-22T18:00:48.390 回答
3

我遇到过同样的问题。大多数时候,问题在于有一个剩余文件

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

这适用于大多数人,但我的情况不同 - 我尝试在过去 3 小时内搜索这个问题,通过 brew 在 OSX 上卸载 postresql,清除数据库,没有任何效果。

最后,我注意到我遇到了一个 brew 问题,每当我尝试安装任何东西时,它都会弹出:

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

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

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

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

于 2018-12-27T11:13:37.817 回答
2

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

于 2018-01-26T16:54:59.650 回答
1

/var/log/ 运行 catpostgres.log 这里你会找到postgres失败的原因。如果它是智能关闭,那么您的icu4c版本(Unicode 的 C++ 库)可能不正确,它与postgres. 所以运行以下命令。

brew upgrade brew cleanup 这应该工作;)

于 2019-06-18T10:06:36.387 回答
0

我刚刚遇到了与我将机器(ubuntu)更新并得到以下错误相同的问题:

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

完成更新过程后,当我重新启动系统错误消失了。它的工作就像以前一样魅力。我猜这是在 pg 更新并且另一个进程开始时发生的。

于 2015-03-02T05:42:09.383 回答
0

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

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

$顶部

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

$kill pid_number

于 2014-07-18T20:20:14.353 回答
0

@Jagdish Barabari 的回答给了我解决这个问题所需的线索。结果发现只有一个运行时安装了两个版本的 postgresql。清除所有 postgresql 文件并重新安装最新版本为我解决了这个问题。

于 2016-05-11T17:20:16.603 回答
0

尝试在MacOS Monterey上启动 PostgreSQL 数据库服务器时,我也有同样的担忧。

当我运行以下命令重新启动 PostgreSQL 数据库服务器时:

brew services restart PostgreSQL

它重新启动,但是当我尝试使用以下命令检查 PostgreSQL 数据库服务器的状态时,出现错误:

Name       Status     User           File
mysql      started    promisepreston ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
nginx      started    promisepreston ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
postgresql error  256 root           ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

这对我有用

首先,我使用以下命令检查了 PostgreSQL 数据库服务器的日志文件,以了解错误的原因:

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

或者

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

日志显示以下错误:

"root" execution of the PostgreSQL server is not permitted.
The server must be started under an unprivileged user ID to prevent
possible system security compromise.  See the documentation for
more information on how to properly start the server.
2022-01-25 19:01:06.051 WAT [29053] FATAL:  database files are incompatible with server
2022-01-25 19:01:06.051 WAT [29053] DETAIL:  The data directory was initialized by PostgreSQL version 13, which is not compatible with this version 14.1.

对于根执行错误,我必须运行以下命令来修复当我brew services使用sudo命令前缀运行时弄乱我们的文件权限。替换your-username为您的 MacOS 用户名(在我的情况下,我的用户名是promisepreston

# Stop postgresql
sudo brew services stop PostgreSQL

# In case service file is copied to ~/Library/LaunchAgents as well
brew services stop postgresql

# Fix permission of homebrew files
sudo chown -R your-username:admin $(brew --prefix)/*

由于数据库文件与服务器不兼容,我必须简单地将使用版本 13 创建的现有 PostgreSQL 数据文件升级到我计算机上的最新 PostgreSQL 版本,即 14.1,方法是运行以下命令:

brew postgresql-upgrade-database

之后,我重新启动了 PostgreSQL 数据库服务器:

brew services restart PostgreSQL

然后使用以下命令检查状态:

brew services list

然后我得到下面的输出,表明一切正常:

Name          Status  User           File
mysql         started promisepreston ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
nginx         started promisepreston ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
postgresql    started promisepreston ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

就这样。

参考Brew Postgresql 启动但进程未运行

于 2022-01-25T19:27:14.137 回答
0

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

于 2019-04-04T16:19:04.167 回答
0

只是把我的解决方案放在这里,因为我有一个类似的错误

所有这些都是从命令行完成的(根本没有sudo代码)

  1. 我确认我已经安装了 PostgreSQL psql -V(顺便说一句,这是一个大写的“V”)
  2. 我试图连接到服务器:psql postgres

这就是我遇到这个问题的错误的地方

在对可能的修复进行了一些研究之后,我显然安装了 PostgreSQL,但我没有安装默认服务器。

我要做的是创建一个自定义数据目录

据我所知,创建自定义数据目录与使用默认服务器相同。

由于这是一台新机器(使用苹果 m1 芯片的 macBook pro 2021),我想找到最简单的解决方案,我相信这个自定义数据目录就是这样。解决此问题的其余步骤如下:

  1. 从主目录,我创建了一个空目录mkdir myData
  2. 从主目录,初始化一个服务器:(initdb myData将一堆文件扔到 myData 目录中)
  3. pg_ctl -D myData -l logfile start(启动服务器)
  4. psql postgres(连接到服务器)

所以,作为一个对 PostgreSQL 和数据库和 SQL 相当陌生的人,请注意:

  • 可以“退出”与服务器的连接,使用\q(连接到服务器时,也可以输入“帮助”)
  • 也可以“停止”服务器,以及pg_ctl -D myData stop

在这一点上,我现在确定我已经安装了 PostgreSQL,有一个可以启动和停止的服务器,并且能够连接到该服务器/从该服务器断开连接。

如果其中任何一个“不好”,请告诉我。

于 2021-09-25T17:20:23.677 回答
0

超级新手警报:我刚刚学习 Web 开发,我遵循的特定教程提到我必须安装 Postgres,但实际上并没有提到我也必须运行它......一旦我打开 Postgres 应用程序,一切都很好,而且花花公子。

于 2016-05-01T07:08:51.200 回答