重新启动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。
答案 0 :(得分:348)
警告:如果删除postmaster.pid而不确定没有任何postgres
进程在运行,可能会永久损坏您的数据库。 (PostgreSQL应该在postmaster退出时自动删除它。)。
解决方案:这解决了问题 - 我删除了这个文件,然后一切正常!
/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) 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".
根据错误消息中的建议,我将postmaster.pid文件删除到与server.log相同的目录中。这解决了这个问题,我可以重新启动。
所以,似乎我的macbook冻结并且被重新启动导致Postgres认为即使重启后它的进程仍在运行。删除此文件已解决。希望这有助于他人!很多人都有类似的问题,但大多数答案都与文件权限有关,而在我的情况下,情况则有所不同。
答案 1 :(得分:104)
以上都不适合我。我必须通过以下方式重新安装Postgres:
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
)答案 2 :(得分:71)
如果您使用的是macOS并通过自制程序安装postgres,请尝试使用
重新启动它brew services restart postgresql
如果您使用的是Ubuntu,可以使用其中一个命令
重新启动它sudo service postgresql restart
sudo /etc/init.d/postgresql restart
答案 3 :(得分:15)
也许这无关紧要,但是当您使用postgres
将brew
升级到主要版本时,会出现类似的错误;使用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应用程序,一切都很好,花花公子。