Postgresql 适配器(pg):无法连接到服务器

Posted

技术标签:

【中文标题】Postgresql 适配器(pg):无法连接到服务器【英文标题】:Postgresql adapter (pg): could not connect to server 【发布时间】:2012-12-22 21:35:02 【问题描述】:

每次运行 Rails 应用程序时都会出现此错误(它无法连接到我的本地 Postgresql

/Users/leonardo/.rvm/gems/ruby-1.9.3-p362/gems/activerecord-3.2.11/lib/
active_record/connection_adapters/postgresql_adapter.rb:1208:in `initialize': 
could not connect to server: No such file or directory (PG::Error)
   Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

我正在使用Postgres.app,它运行正常。

如果我跑步

$ psql

我可以正常登录到 Postgresql 控制台。

$ which psql
 /Applications/Postgres.app/Contents/MacOS/bin/psql

Gemfile

source 'https://rubygems.org'
ruby "1.9.3"

gem 'rails', '3.2.11'
gem "pg"

database.yml

development:
  adapter: postgresql
  encoding: unicode
  username: leonardo
  password: 
  database: zapping
  port: 5432  

Postgresql(控制台)

$ psql
leonardo=# \l

【问题讨论】:

您可以尝试将host: localhost 添加到您的database.yml 吗? (基于那个答案:***.com/a/10793186/919641) 如果您将其添加到“答案”中,我将标记为已接受 【参考方案1】:

尝试将host: localhost 添加到您的database.yml。 (基于:https://***.com/a/10793186/919641)

【讨论】:

【参考方案2】:

您的 Pg gem 是针对 Mac OS X 中预安装的 PostgreSQL libpq 编译的,而您使用的是在较新版本中安装的 psql,反之亦然。

这可以通过指定 TCP/IP 连接、将localhost 添加到database.yml 来解决,但最好针对您实际运行的服务器编译Pg gem 和libpq。为此,您应该能够在编译之前将PATH 环境变量设置为其中包含正确pg_config 的文件夹。在你的情况下,这将在 Postgres.app 内的某个地方。

【讨论】:

克雷格,你能详细说明一下吗?在哪里和哪个环境。我应该准确设置变量吗? 谢谢,这个答案帮助我解决了这个问题。我采取的步骤很简单:1)gem uninstall pg,2)bundle install,完成。 完美答案,虽然更新database.yml 也有效,但我认为这可能是解决这个问题的最佳和最正确的解决方案。例如,如果您在安装pg 之后 通过 Homebrew 安装了 Postgresql,您可能会看到此错误。然后按照上面@haslo 的说明进行操作。【参考方案3】:

如果添加host: localhost后仍然无效,请删除postmaster.pid

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

【讨论】:

这解决了我遇到的问题。尽管运行brew services start postgresql 表示成功,但运行ps x | grep postgres 显示没有服务器在运行。我按照这里的步骤(包括删除postmaster.pid),它为我解决了这个问题:coderwall.com/p/zf-fww/… 如果您的计算机崩溃并且您执行了强制关机但 postgres 未正确终止,则此方法有效,有时 pid 文件会卡在那里...删除它有助于使其再次运行。 不不不不要这样做!如果您确认 no postgres 进程仍在运行,则只有可以。如果有必要,它应该很少;只有当其他进程碰巧被分配了 postmaster 的 pid 时,才会出现这种情况。 本地 postgres 连接应该没问题。 这是我的问题,我不明白@CraigRinger 上面的回复这有什么害处?当它最终启动时,服务立即为我重建了它。【参考方案4】:

您应该将host: localhost 添加到您的数据库配置中...

【讨论】:

我不知道为什么我被否决了,我在 5 分钟前回答了!接受的答案(与我的帖子具有相同的解决方案)? 谢谢。就我而言,我必须添加host: db【参考方案5】:

我在 Mac 上遇到了同样的问题。事实证明,我在路径上的 psql 工作不正常。 尝试通过键入以下命令启动 psql:

~/projects/some_project/project-rails$ psql
  psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

如果您看到这一点,则表明您路径上的 psql 二进制文件正在尝试使用套接字连接并且无法这样做(无论出于何种原因)。由于我已经下载了pgadmin 并且连接正常,我知道这不是服务器的问题。

修复它,将正确版本的 pgsql 添加到我的 PATH:

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

现在 psql(和 rails)很高兴!

【讨论】:

还需要重新安装 pg gem【参考方案6】:

我也有同样的问题。你必须实际运行/启动 postgres。 Postgres 一定是最近在我的电脑上停止运行了,所以我必须通过启动 postgres 服务器来确保它正在运行

postgres -D /usr/local/var/postgres

然后以下命令(导致我出现与您相同的错误)都起作用了:

bundle exec rake db:create db:migrate
bundle exec rspec

【讨论】:

【参考方案7】:

我遇到了这个问题。这里的一位 cmet 帮助我解决了这个问题。

谢谢,这个答案帮助我解决了这个问题。我采取的步骤很简单:1) gem卸载pg,2)捆绑安装,完成。 – haslo 2013 年 12 月 3 日 20:27

gem uninstall pg
bundle install

【讨论】:

这为我解决了问题。我已经卸载/重新安装了 postgres,并且需要重建 gem。【参考方案8】:

由于这是我的搜索结果中出现的第一篇文章,我决定为此发布更新的修复程序。由于上述建议都不适合我。

brew postgresql-upgrade-database

它升级了 postgresql 数据并移动了我的旧版本。我在 9.6 而不是 10.4

找到解决方案here

【讨论】:

【参考方案9】:

find / -name 'postgresql.conf'

netstat -an | grep 5432 # => /tmp/.s.PGSQL.5432

vi /Users/admin/Library/Application\ Support/Postgres93/var/postgresql.conf

FROM: unix_socket_directories = '/tmp'

收件人: unix_socket_directories = '/var/pgsql_socket'

sudo mkdir /var/pgsql_socket

sudo chmod 777 /var/pgsql_socket

【讨论】:

这个解决方案,最终在我的情况下,将解决我的 Rails 无法启动的问题。在实现这一点的过程中,我采用了一些不同的方法。我实际上创建了一个符号链接,如This Post 中所述【参考方案10】:

对于heroku,这就是你所需要的。

heroku addons:create heroku-postgresql

production:
 adapter: postgresql
 encoding: unicode
 host: localhost
 # For details on connection pooling, see rails configuration guide
 # http://guides.rubyonrails.org/configuring.html#database-pooling
 pool: 5

【讨论】:

【参考方案11】:

我只是遇到了 postgres 应用程序没有在我的 Mac 上运行的问题...

【讨论】:

【参考方案12】:

在 Mac 上,我有不同版本的 postgresql。当我尝试brew switch postgresql 9.5.5时,这个问题已经解决了(我认为版本号在这一点上并不重要)

$ brew switch postgresql 9.5.5
Cleaning /usr/local/Cellar/postgresql/9.6.1
Cleaning /usr/local/Cellar/postgresql/9.6.5
Cleaning /usr/local/Cellar/postgresql/10.2
Cleaning /usr/local/Cellar/postgresql/10.3
Cleaning /usr/local/Cellar/postgresql/9.5.5
Cleaning /usr/local/Cellar/postgresql/9.5.4

顺便说一句,所有数据都会消失。我想有一个 brew 命令可以在不切换版本的情况下执行此操作,但我找不到。

【讨论】:

【参考方案13】:

我在 OS High sierra 10.13 上遇到了同样的问题 我按照这个网站的说明下载了 10.4 版 参考:https://postgresapp.com/

然后我将其添加到 bash 配置文件中: 导出 PATH=$PATH:/Library/PostgreSQL/10.4/bin:$PATH

重新启动终端。

打开新窗口终端然后输入:psql -U postgres

之后,您将看到以下消息: psql (10.4) 输入“帮助”以获得帮助。

postgres=#

【讨论】:

【参考方案14】:

我的问题是 /etc/hosts 文件已更改并且没有这个关键条目:127.0.0.1 localhost

【讨论】:

【参考方案15】:

我遇到了类似的问题 - 当我在终端中运行 psql 命令时,我仍然遇到同样的错误,所以这告诉我这不是 pg gem 的问题,我应该检查 postgres 设置本身。所以我检查了 postgres 日志——在我的例子中,它们位于/usr/local/var/log/postgres.log,我看到了以下错误:

dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.66.dylib
  Referenced from: /usr/local/opt/postgresql/bin/postgres

所以知道确切的错误帮助我解决了这个问题,在我的例子中,基于this answer我跑了

brew switch icu4c 66.1

重启 postgres 后问题解决了:

brew services restart postgresql

【讨论】:

以上是关于Postgresql 适配器(pg):无法连接到服务器的主要内容,如果未能解决你的问题,请参考以下文章

PHP 无法在 CentOS 7 上连接到 PostgreSQL

如何使用来自 SqlAchemy+pg8000 的 SSL 连接到 Postgresql?

无法连接到 PostgreSQL 服务器:致命:角色“apache”不存在

致命:主机“::1”没有 pg_hba.conf 条目试图通过 ssh 隧道连接到 postgresql 服务器

pg Admin 4 - 尝试连接到 PostgreSQL 13 服务器时“postgres”用户的密码

如何连接到谷歌计算引擎上的远程 PostgreSQL 服务器?