【问题标题】:After upgrading PostgreSQL from 8.4 to 9.1 pg gem doesn't connect to the database将 PostgreSQL 从 8.4 升级到 9.1 pg gem 后无法连接到数据库
【发布时间】:2014-02-14 07:15:46
【问题描述】:

正如标题所说,我已经将 PostgreSQL 数据库从版本 8.4 升级到了 9.1。

我的pg_hba.conf 文件包含以下内容:

local   all        all            trust

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
#local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

我也运行了这些命令:

sudo gem uninstall pg
sudo apt-get remove libpq-dev
sudo apt-get install libpq-dev
sudo gem install pg
sudo service postgresql restart

当我从命令行运行 psql 时,一切正常,但当我尝试从 Ruby 控制台连接时,会发生以下情况:

$:  /va$ sudo pry
[1] pry(main)> require 'pg'
=> true
[2] pry(main)> conn = PG.connect( dbname: 'mydb' )
PG::ConnectionBad: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
from /usr/local/lib/ruby/gems/1.9.1/gems/pg-0.17.1/lib/pg.rb:40:in `initialize'

【问题讨论】:

    标签: ruby postgresql pg


    【解决方案1】:

    您的 Pg gem 正在使用 libpq 版本,该版本默认为与您的新服务器使用的不同的 unix_socket_directory。很可能您的新服务器使用/tmp,而您的旧服务器使用/var/run/postgresql

    您可以通过将localhost 指定为要连接的目标主机来强制建立TCP/IP 连接,例如dbname=fred host=localhot user=bob 之类的连接字符串,或者您将参数提供给Pg gem。不过,这并不是最好的答案。

    相反,您应该:

    • 根据新安装的 PostgreSQL 中更新的 libpq 重建 pg gem。为此,请设置 PATH 以便新 PostgreSQL 安装中的 pg_config 在重建 Pg gem 之前首先位于路径上。可以通过pg_config --version查看版本。

    • 使用host=/tmp dbname=fred user=bob 明确指定要连接的unix_socket_directoryhost 参数可以采用主机名到套接字目录的路径。这样做意味着您仍在为会话使用高效的 unix 套接字,而无需支付不必要的 TCP/IP 开销。

    【讨论】:

      猜你喜欢
      • 2014-12-14
      • 2011-04-06
      • 2023-02-14
      • 1970-01-01
      • 2017-01-10
      • 2017-02-24
      • 1970-01-01
      • 2019-04-17
      • 2020-10-17
      相关资源
      最近更新 更多