【问题标题】:Postgresql adapter (pg): could not connect to serverPostgresql 适配器(pg):无法连接到服务器
【发布时间】: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 吗? (基于那个答案:stackoverflow.com/a/10793186/919641
  • 如果您将其添加到“答案”中,我将标记为已接受

标签: ruby-on-rails postgresql rails-postgresql pg


【解决方案1】:

尝试将host: localhost 添加到您的database.yml。 (基于:https://stackoverflow.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
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2020-08-14
                    • 1970-01-01
                    • 2020-01-24
                    • 1970-01-01
                    • 2019-10-08
                    • 2017-08-02
                    • 2017-03-03
                    • 2012-10-10
                    相关资源
                    最近更新 更多