服务器是在主机"localhost"(:: 1)上运行并在端口5432上接受TCP/IP连接吗?

Thi*_*ent 48 ruby postgresql ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

在此之前,请注意我在Stack Overflow和网络上的文章中发现了几个类似的问题,但这些都没有帮助我解决我的问题:

现在,问题在于:

  • 我有一个像魅力一样的Rails应用程序.
  • 与我的合作者一起,我们使用GitHub一起工作.
  • 我们有一个master和一个mvp分支机构.
  • 我最近git用Homebrew(Mac)更新了我的版本.
  • 我们使用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?
Run Code Online (Sandbox Code Playgroud)

我试图多次重启计算机.

我还检查了以下内容/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
Run Code Online (Sandbox Code Playgroud)

如您所见,那里没有postmaster.pid文件.

知道如何解决这个问题吗?

小智 75

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"?
Run Code Online (Sandbox Code Playgroud)

然后kill -9 PID在HINT中运行

你应该好好去.

  • 对于我的情况,最好的解决方案是我的机器意外关闭并且重新启动服务不能解决问题-谢谢! (3认同)
  • 这应该是公认的答案. (3认同)
  • 如果你正在使用自制软件,那么`brew services start postgres`或`brew services restart postgres`可能会成功 (2认同)
  • 谢谢你!我第二次遇到这个问题,你是如何理解这将是解决方案的? (2认同)

Gra*_*ick 38

你很可能没电了,你的postgresql服务器没有正确关机.

最简单的解决方法是下载官方postgresql应用程序并启动它:它将强制服务器启动(http://postgresapp.com/)

  • 感谢您的回答。我刚刚下载了该应用程序并启动了它。如果我在启动服务器之前关闭它,那么我仍然会遇到相同的错误。如果我不关闭它,则会收到一条错误消息,指出我的“数据库不存在”。这可以相关吗? (3认同)

小智 30

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

尝试

postgres -D /usr/local/var/postgres
Run Code Online (Sandbox Code Playgroud)

你可能会看到

FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 449) running in data directory "/usr/local/var/postgres"?
Run Code Online (Sandbox Code Playgroud)

然后试试

kill -9 PID
Run Code Online (Sandbox Code Playgroud)

kill -9 419
Run Code Online (Sandbox Code Playgroud)

它应该正常开始postgres


小智 12

它可能就像postgresql服务失败一样简单.试试跑步:

sudo service postgresql start
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题.


Tan*_*Tan 11

这适用于我的情况:

brew uninstall postgresql
rm -fr /usr/local/var/postgres/
brew install postgresql
Run Code Online (Sandbox Code Playgroud)


shi*_*ovk 8

  1. 就我而言,PostgreSQL 从版本更新13.414后台,因此它通过以下方式修复:

    brew postgresql-upgrade-database
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在其他情况下,问题通过以下方式解决:

    rm /usr/local/var/postgres/postmaster.pid
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    rm /opt/homebrew/var/postgres/postmaster.pid
    
    Run Code Online (Sandbox Code Playgroud)

    或按版本(例如postgresql@14

    rm /opt/homebrew/var/postgresql@14/postmaster.pid
    
    Run Code Online (Sandbox Code Playgroud)
  3. 重新启动服务postgresql

    brew services restart postgresql
    
    Run Code Online (Sandbox Code Playgroud)

附:

你如何理解问题所在?

首先查看哪些服务未正确启动:

brew services list
Run Code Online (Sandbox Code Playgroud)

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

tail -f /usr/local/var/log/postgres.log
Run Code Online (Sandbox Code Playgroud)

或者

tail -f /opt/homebrew/var/log/postgres*
Run Code Online (Sandbox Code Playgroud)

所以通过这个错误的文本找到答案


Tal*_*Meh 7

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

brew services restart postgresql
Run Code Online (Sandbox Code Playgroud)


Ama*_*mar 6

这可能是由于意外关闭而未删除为postgress创建的pid文件。因此,要解决此问题,请删除此pid文件。

  1. 找到postgres数据目录。在使用自制软件的MAC上/usr/local/var/postgres/,可能在其他系统上/usr/var/postgres/

  2. 删除PID文件

    rm postmaster.pid

  3. 重新启动后退。在Mac上,

    brew服务重新启动postgresql

  • 谢谢!就我个人而言,我必须以这种方式删除: rm /Users/<username>/Library/Application\ Support/Postgres/var-<versionId>/postmaster.pid (2认同)

Muh*_*ani 6

步骤1:

cd /etc/postgresql/12/main/
Run Code Online (Sandbox Code Playgroud)

打开名为postgresql.conf

sudo nano postgresql.conf
Run Code Online (Sandbox Code Playgroud)

将此行添加到该文件中

listen_addresses = '*'
Run Code Online (Sandbox Code Playgroud)

然后打开名为pg_hba.conf

sudo nano pg_hba.conf
Run Code Online (Sandbox Code Playgroud)

并将此行添加到该文件中

host  all  all 0.0.0.0/0 md5
Run Code Online (Sandbox Code Playgroud)

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

重新启动你的服务器

sudo /etc/init.d/postgresql restart
Run Code Online (Sandbox Code Playgroud)