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 服务器