ChatGPT解决这个技术问题 Extra ChatGPT

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

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

作为健全性检查,确保你的机器上运行了 PG
当您留下答案时,请尝试解释为什么会发生这种情况,或者 Postgres 系统是如何工作的,所以我们不只是在尝试随机的东西。
brew reinstall postgresql stackoverflow.com/a/39781473/6086226 为我工作
brew reinstall postgresql 这解决了我的问题

F
Flip

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

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

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

--

这就是我如何弄清楚为什么需要删除它。

我使用以下命令查看是否有任何 PG 进程正在运行。对我来说没有,我什至无法启动 PG 服务器:ps auxw | grep post 我搜索了上面错误消息中的文件 .s.PGSQL.5432。我使用了以下命令: sudo find / -name .s.PGSQL.5432 -ls 这在搜索我的整个计算机后没有显示任何内容,因此该文件不存在,但显然 psql “想要它”或“认为它”在那里”。我查看了我的服务器日志并看到以下错误:服务器日志末尾的 cat /usr/local/var/postgres/server.log 我看到以下错误:FATAL: pre-existing shared memory block (key 5432001,ID 65538)仍在使用 提示:如果您确定没有旧的服务器进程仍在运行,请删除共享内存块或删除文件“postmaster.pid”。按照错误消息中的建议,我删除了与 server.log 相同目录中的 postmaster.pid 文件。这解决了问题,我能够重新启动。

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


希望这个答案最终能帮助其他人,并感谢支持它的人。尽管版主将此问题标记为重复,但它是独特且有用的。感谢堆栈溢出的精彩网站和这里的专家分享!
只是 FWIW,删除 postmaster.pid 很危险,您必须真正确保在执行此操作之前没有 postgres 进程正在运行。
很好的答案。感谢您发布您的整个过程,而不仅仅是潜在的破坏性命令!
同意。关于 postmaster.pid 的答案很好,但是确定 postgres 是否/在哪里运行的过程的每一步都是非常宝贵的。谢谢!
我在 macos 上的 postgres 登录位于 /usr/local/var/log/postgres.log
G
Gianfranco P.

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

使用 brew 卸载 postgresql : brew uninstall postgresql

酿造医生(修复这里的任何东西)

冲泡清理

删除所有 Postgres 文件夹:

rm -r /usr/local/var/postgres

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

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

启动服务器: brew services start postgresql

您现在应该必须创建您的数据库... (createdb)


为我工作,但我不必删除实际的数据库,也没有应用程序支持中的文件夹。我认为关键是一些 brew 元素在安装 postgres 时破坏了符号链接。修复它们并再次安装 postgres 解决了这个问题。谢谢!
这和最佳答案都不适合我,直到我也跑了 brew postgresql-upgrade-database
这些对我有用,除了我不必删除旧数据。
确认:这会删除您的所有数据库,对吗?我只需要一个 brew reinstall postgres 就可以了,确认最新的 Homebrew Postgres 主要版本号与我当前的(损坏的)版本号相同。
@JacobFord 您是说 brew reinstall postgresql 不会擦除您的数据库吗?
B
Boris Verkhovskiy

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

brew services restart postgresql

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

sudo service postgresql restart

sudo /etc/init.d/postgresql restart

F
Fred Willmore

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

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

这对我在 Catalina 上从 11 点到 12 点有用
也为我工作
s
smartworld-dm

这是我的方式:

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

当没有使用自制软件停止和启动/重新启动/重新安装 Postgres 时,这对我有用。谢谢@smartworld-dm
这是我经常回来的灵魂。我可能会添加一个别名,当我运行 fix-my-postgresql 时它会执行这个:)
知道为什么每次重新启动 PC 时都必须这样做吗?
相似但不同:) ... brew services stop postgresql; rm /usr/local/var/postgres/postmaster.pid; brew 服务启动 postgresql
S
Satendra Rawat

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

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

惊讶!!!我只是在我的 MAC 操作系统上安装 postgresql,而不是在连接时,连接失败。当我作为服务启动时,postgresql 没有在后台运行,而是在这些命令之后运行。一切都完美无缺。
^^^ 这个序列对我有用,截至 2021 年 6 月适用于 macOS 的工作解决方案。感谢您记录@satendra-rawat!如果这不起作用,它可能是一个陈旧的 PID,然后我会尝试 @smartworld-dm solution above
只是 brew upgrade postgresql@VERSION 为我做的,VERSION=11 等。
A
Antoine

如果您的 postmaster.pid 不见了并且您无法重新启动或其他任何事情,请执行以下操作:

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

正如最初解释的 here


M
Matthew Lemieux

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


J
Jack Kinsella

发生这种情况的另一类原因是 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 上工作,所以在放弃之前尝试了两次)


👍🏻 这对我有用,我也必须运行它两次 - 第一次失败并出现原始错误:connection to database failed: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/usr/local/var/log/.s.PGSQL.50432"? 但第二次运行它正常工作¯\_(ツ)_/¯
c
crazzyaka

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

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

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

export PATH=/Applications/Postgres93.app/Contents/MacOS/bin/:$PATH

psql

Postgres93.app

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

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

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

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


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

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

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

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

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

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


我很高兴我发布了这个。另一个崩溃和答案可以相当快地检索......
J
Jagdish Barabari

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

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

sudo /etc/init.d/postgres status

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

sudo /etc/init.d/postgres start

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

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


M
Maciej Pk

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

/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,它终于奏效了!

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


P
Piyush Sawaria

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


此解决方案帮助我解决了 postgresql@11 的常规问题。每当我的笔记本电脑放电并被迫重新启动时,我都会经常遇到这个问题。
j
jawns317

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

我补充说:

127.0.0.1 localhost

这解决了我的问题。


N
Nick Res

我不完全确定为什么,但我的 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 文档对我帮助很大。我讨厌阅读诸如“将其粘贴进去!”之类的答案。因为我不知道到底发生了什么以及为什么。


K
Kingsley Ijomah

我有同样的问题,这是由于从版本 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

感谢您将我指向日志文件。发现数据库被锁了,这个其他的答案帮助了我。 stackoverflow.com/a/49344641/1070718
T
Tamlyn

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


S
Shishir

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

brew upgrade brew cleanup 这应该可行 ;)


如果 brew cleanup 破坏 Homebrew,则可能必须在之后运行 brew style
P
Promise Preston

在连接尝试在 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.

对于根执行错误,当我使用 sudo 命令前缀运行 brew services 时,我必须运行以下命令来修复文件权限问题。将 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 Starts But Process Is Not Running


c
colintherobot

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

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

$顶部

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

$kill pid_number


类似于 ps aux | grep \[p\]ostgres | awk '{ print $2 }' 以返回 pid,或 kill $(ps aux | grep \[p\]ostgres | awk '{ print $2 }')(在 zsh 上 [] 必须转义为 \[\],但不是在 bash 上)
G
Gagan Gami

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

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

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


L
Lorenzo

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


5
5280Angel

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


d
ddtraveller

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


J
J.R. Bob Dobbs

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

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

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

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

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

我必须做的是create a Custom Data Directory

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

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

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

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

可以使用 \q “退出”与服务器的连接(连接到服务器时,也可以键入“帮助”)

也可以使用 pg_ctl -D myData stop 来“停止”服务器

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

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


K
Kris Farrugia

这个答案对我有用:https://stackoverflow.com/a/45454567/15067545 在我的 ubuntu 系统上。

命令:sudo service postgresql restart


您的答案可以通过额外的支持信息得到改进。请edit添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。您可以找到有关如何写出好答案的更多信息in the help center
T
Tristan

对于在 M1 mac 上遇到此问题的用户,请尝试删除此文件,然后重新启动 brew 服务:

rm /opt/homebrew/var/postgres/postmaster.pid