重新启动我的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。
我也犯过类似的错误。
所有这些都是从命令行完成的(根本没有sudo调用)
我验证我已经安装了PostgreSQL psql -V(注意这是一个大写的“V”)
我试图连接到服务器:psql postgres
这就是我在堆栈溢出问题中遇到错误的地方
在做了一些关于可能的修复的研究之后,我显然安装了PostgreSQL,但我没有一个默认的服务器。
我要做的是创建一个自定义数据目录
据我所知,创建自定义数据目录与设置默认服务器是一样的。
由于这是一台新机器(使用apple 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,有一个服务器,我可以启动和停止,并有能力连接到/断开,该服务器。
警告:如果您删除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认为它的进程在重启后仍在运行。删除此文件已解决。很多人都有类似的问题,但大多数答案都与文件权限有关,而我的情况则不同。
我也有同样的问题。
大多数情况下,问题在于有一个剩余的文件
/ usr / local / var / pid postgres -邮政局长。
这适用于大多数人,但我的情况是不同的-我试着在谷歌上搜索这个问题3个小时,通过brew在OSX上卸载postresql,清除数据库,没有任何工作。
最后,我注意到我有一个问题,每当我试图安装任何东西时,它会弹出:
Error: Permission denied @ rb_sysopen - /private/tmp/github_api_....
或者在安装结束时进行类似的操作。
我只是简单地执行了sudo chmod -R 777 /private/tmp,它终于工作了!
我写下来是因为这可能是别人的解
导致这种情况发生的另一类原因是由于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
(奇怪的是,它在第一次运行时失败了,在第二次运行时工作了,所以在放弃之前尝试两次)