2014-01-23 3 views
2

Как говорится в названии, я обновил базу данных PostgreSQL с версии 8.4 до 9.1.После обновления PostgreSQL с 8.4 до 9.1 pg gem не подключается к базе данных

Мой 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' 

ответ

2

Ваш Pg gem использует версию libpq, которая по умолчанию использует другой unix_socket_directory, который использует ваш новый сервер. Скорее всего, ваш новый сервер использует /tmp, а ваш старый - /var/run/postgresql.

Вы можете принудительно установить соединение TCP/IP, указав localhost в качестве целевого хоста для подключения к, например, для подключения, например dbname=fred host=localhot user=bob, или, тем не менее, вы передаете параметры драгоценному камню Pg. Впрочем, это не лучший ответ.

Вместо этого, вы должны либо:

  • Перестроить pg камень против обновленного libpq из новой PostgreSQL установки. Для этого установите PATH так, чтобы pg_config с новой установки PostgreSQL был первым на пути, прежде чем восстанавливать драгоценный камень Pg. Вы можете проверить версию с помощью pg_config --version.

или

  • Укажите unix_socket_directory для подключения к явным, с host=/tmp dbname=fred user=bob. Параметр host может принимать имя хоста или путь к каталогу сокетов. Это означает, что вы по-прежнему используете хорошие эффективные сокеты unix для своих сеансов и не оплачиваете ненужные накладные расходы TCP/IP.
Смежные вопросы