正如标题所说,我已将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'
答案 0 :(得分:2)
您的Pg gem使用的libpq
版本默认使用与新服务器使用的unix_socket_directory
不同的/tmp
版本。您的新服务器很可能使用/var/run/postgresql
而旧的服务器使用localhost
。
您可以通过将dbname=fred host=localhot user=bob
指定为要连接的目标主机来强制TCP / IP连接,例如像pg
这样的连字符,或者您将参数提供给Pg gem。但这并不是最好的答案。
相反,您应该:
libpq
重建PATH
gem。为此,请设置pg_config
,以便在重建Pg gem之前,新PostgreSQL安装中的pg_config --version
首先位于路径上。您可以使用unix_socket_directory
检查版本。或
host=/tmp dbname=fred user=bob
明确指定要host
连接的{{1}}。 {{1}}参数可以将主机名或作为套接字目录的路径。这样做意味着您仍然在为会话使用高效的unix套接字,而不是支付不必要的TCP / IP开销。