服务器是否在主机“localhost”(::1)上运行,并接受端口5432上的TCP/IP连接?

146

首先请注意,我在Stack Overflow和整个网络上找到了几个类似的问题和文章,但是没有一个能帮助我解决我的问题:

现在,问题如下:

  • 我有一个工作得很好的Rails应用程序。
  • 与我的合作者一起,我们使用GitHub共同工作。
  • 我们有一个master分支和一个mvp分支。
  • 我最近使用Homebrew(Mac)更新了我的git版本。
  • 我们使用Foreman在本地启动应用程序。

现在,当我尝试在本地启动应用程序时,我会收到以下错误:

PG::ConnectionBad at /
could not connect to server: Connection refused
    Is the server running on host "localhost" (::1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?

我尝试了多次重新启动我的计算机。

我还检查了/usr/local/var/postgres的内容:

PG_VERSION      pg_dynshmem     pg_multixact    pg_snapshots    pg_tblspc       postgresql.conf
base            pg_hba.conf     pg_notify       pg_stat         pg_twophase     postmaster.opts
global          pg_ident.conf   pg_replslot     pg_stat_tmp     pg_xlog         server.log
pg_clog         pg_logical      pg_serial       pg_subtrans     postgresql.auto.conf

您可以看到,那里没有postmaster.pid文件。

您有任何解决此问题的想法吗?


你能否更新问题并附上 postgresql.conf 的内容? - Pavan
我知道这是一个非常老的问题。但今天我在Mac上遇到了同样的问题,brew reinstall postgresql@13解决了我的问题。(我的项目需要使用v13) - Shrabanee
请遵循此链接:https://dev59.com/-lgQ5IYBdhLWcg3wazIi#74163070 - abdulalim
29个回答

194

运行postgres -D /usr/local/var/postgres,你应该能看到类似如下的内容:

 FATAL:  lock file "postmaster.pid" already exists
 HINT:   Is another postmaster (PID 379) running in data directory "/usr/local/var/postgres"?

然后在 HINT 中运行 kill -9 PID,然后你就可以开始了。


5
针对我的情况,即机器突然关闭并重新启动服务无法解决问题的最佳解决方案 - 谢谢! - Paul Nelligan
11
如果您正在使用Homebrew,brew services start postgresbrew services restart postgres可能会有所帮助。 - Mirror318
2
谢谢!我已经第二次遇到这个问题了,你是怎么理解这会是解决方案的? - qasimalbaqali
1
有没有适用于Linux Ubuntu发行版的等效解决方案? - tito.300
1
在经过数小时的尝试解决问题后,这个方法在2019年对我有效。 - Mwangi Kabiru
显示剩余6条评论

77

很可能是因为您的系统意外关闭了

尝试

postgres -D /usr/local/var/postgres
你可能会看到
FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 449) running in data directory "/usr/local/var/postgres"?
然后尝试。
kill -9 PID

例子

kill -9 419

它应该正常启动Postgres


是的,我的系统意外关闭了,这解决了我的问题。谢谢。 - Developine

76
你的电池可能已经用尽了,导致你的postgresql服务器没有正确关闭。
最简单的解决方法是下载官方postgresql应用程序并启动,这将强制服务器启动(http://postgresapp.com/)。

3
谢谢你的回答。我刚刚下载了这个应用并启动了它。如果在启动服务器之前关闭应用程序,则仍会收到相同的错误提示。如果不关闭应用程序,则会出现“数据库不存在”的错误提示。这两者之间会有关联吗? - Thibaud Clement
如果您的数据库不存在,您应该运行 rake db:create。 但这很可能与...无关。您刚刚fork了一个repo或类似的东西吗?在使用“rails s”启动服务器之前,您不应该关闭它!应用程序必须在您想要在本地主机上访问站点的整个时间内运行。 - Graham Slick
git fetch 不应该删除数据库。如果运行 rake db:create,会发生什么? - Graham Slick
1
"电池耗尽了"……这正是发生的事情! :-O - Sagar Ranglani
非常感谢。经过这么多的搜索,最终解决了我的问题。 - Zebraboard
显示剩余3条评论

41

PostgreSQL服务器可能已经关闭,解决方案可能只需要运行:

sudo service postgresql start

这对我解决了问题。


32

这可能是由于未预期的关闭而未删除为PostgreSQL创建的pid文件导致的。要解决此问题,请删除此pid文件。

  1. Find the postgres data directory. On a MAC using homebrew it is /usr/local/var/postgres/, other systems it might be /usr/var/postgres/

  2. Remove pid file by running:

    rm postmaster.pid
    
  3. Restart postgress. On Mac, run:

    brew services restart postgresql
    

1
谢谢!就我个人而言,我必须以这种方式删除: rm /Users/<username>/Library/Application\ Support/Postgres/var-<versionId>/postmaster.pid - Nicolas Bodin
这是什么原因?我以前用 MySql 从来没有遇到过这种问题? - fatfrog

18

我在运行postgresql(mac)的Ruby on Rails应用程序中几乎遇到了同样的错误。这对我有用:

brew services restart postgresql

16

在我的情况下,这个方法有效:

brew uninstall postgresql
rm -fr /usr/local/var/postgres/
brew install postgresql

这些安装路径真是令人困惑。最终,这个可行了。删除之前的安装文件是解决方案。 - Masroor

7
  1. 在我的情况下,PostgreSQL 从版本 13.4 升级到 14 的过程是在后台进行的,所以可以通过以下方式修复:
  2. brew postgresql-upgrade-database
    
  3. 对于其他情况,可以通过以下方式解决问题:
  4. rm /usr/local/var/postgres/postmaster.pid
    
    或者
    rm /opt/homebrew/var/postgres/postmaster.pid
    
    或者通过指定版本(例如 postgresql@14):
    rm /opt/homebrew/var/postgresql@14/postmaster.pid
    
  5. 重新启动 postgresql 服务:
  6. brew services restart postgresql
    

附言:

你怎么理解问题在哪里?

首先看看哪个服务没有正确启动:

brew services list

第二个显示文件postgres.log,错误将在哪里:

tail -f /usr/local/var/log/postgres.log

或者

tail -f /opt/homebrew/var/log/postgres*

因此通过这个错误的文本找到答案


6

第一步:

cd /etc/postgresql/12/main/

打开名为 postgresql.conf 的文件。

sudo nano postgresql.conf

将这行代码添加到那个文件中。

listen_addresses = '*'

然后打开名为pg_hba.conf的文件。

sudo nano pg_hba.conf

并将这一行添加到该文件中

host  all  all 0.0.0.0/0 md5

它允许所有用户使用经过加密的密码访问所有数据库

重启您的服务器

sudo /etc/init.d/postgresql restart

4
我用这个命令解决了问题。
pg_ctl -D /usr/local/var/postgres start

有时候,你可能会遇到这个错误。
pg_ctl: another server might be running; trying to start server anyway

因此,请尝试运行以下命令,然后再运行上面给出的第一个命令。

pg_ctl -D /usr/local/var/postgres stop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接