Невозможно подключиться к Postgres на Vagrant Box - соединение отказано?

10

Во-первых, я новичок в Vagrant и Postgres.

Я создал свой экземпляр Vagrant, используя http://files.vagrantup.com/lucid32.box без каких-либо проблем. Я умею бегать vagrant upи vagrant sshбез проблем.

Я следовал инструкциям с одним небольшим изменением, я установил пакет "postgresql-8.4-postgis" вместо "postgresql postgresql-contrib".

Я запустил сервер, используя:

postgres@lucid32:/home/vagrant$ /etc/init.d/postgresql-8.4 start

При подключении к экземпляру Vagrant я могу использовать psqlдля подключения к экземпляру без проблем.

В моем Vagrantfile я уже добавил:

config.vm.forward_port 5432, 5432

но когда я пытаюсь запустить psql с локального хоста, я получаю:

psql: could not connect to server: Connection refused
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

Я уверен, что мне не хватает чего-то простого. Есть идеи?

Обновить:

Я нашел ссылку на такую ​​проблему, и статья предложила использовать:

psql -U postgres -h localhost

с этим я получаю:

psql: server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.
Greg
источник

Ответы:

5

Инструкции из упомянутого вами поста в блоге совсем не подходят для Ubuntu: они используют кусочки установки самоскомпилированного сервера, которые плохо сочетаются с упакованной версией.

Не следует создавать / usr / local / pgsql / data и запускать initdb в этот каталог, потому что пакет ubuntu использует /var/lib/postgresql/<pg-version-number>/<cluster-name>и запускает initdbот имени пользователя.

Ошибка с упоминанием «/tmp/.s.PGSQL.5432» показывает, что ожидаемое расположение этого файла неверно (для ubuntu). Это должно быть в /var/run/postgresql. Вероятно, это связано с тем, что initdb запускается вручную с параметрами, несовместимыми с Ubuntu.

Файлы postgresql.conf и pg_hba.conf, которые нужно редактировать для включения нелокальных соединений, должны находиться внутри /etc/postgresql/8.4/main, а не в / usr / local / pgsql / data.

Он /etc/init.d/postgresql-8.4должен запускаться пользователем root (как и все остальное в /etc/init.d), а не пользователем postgres.

PGDATA не следует устанавливать вручную, потому что опять-таки он мешает работе пакетов ubuntu postgres.

Мой ответ будет состоять в том, чтобы очистить и переустановить пакет postgresql-8.4 без выполнения каких-либо инструкций из поста блога. postgresql-8.4-postgis зависит от postgresql-8.4, поэтому он также будет удален. Также обязательно отмените настройку PGDATA в /etc/bash.bashrc.

Даниэль Верите
источник
Я повторяю установку сейчас, но заметил, что в своем ответе вы предположили, что путь был неправильным, чтобы Ubuntu искала файл в неправильном месте. Может ли это быть из-за клиента, работающего на OSX, в то время как сервер является Ubuntu Box?
Так что я сделал переустановку и получил точно такую ​​же ошибку. Я осмотрелся еще немного и обнаружил, что у меня нет открытых портов в iptables. После следующих инструкций здесь: cyberciti.biz/tips/howto-iptables-postgresql-open-port.html Я могу подключиться.
Я не могу точно сказать, была ли переустановка частью исправления, но это было определенно полезно. Так что я даю вам победу
Когда клиент и серверы находятся на разных хостах, psql должен быть вызван, psql -h <server> [optional other arguments]где <server> - это имя хоста или IP-адрес (и не localhost) сервера (в данном случае это поле ubuntu). В вопросе не похоже, что вы так его называете, поэтому я предполагал, что все команды были запущены на сервере. В любом случае, я действительно уверен, что переустановка была вменяемой мерой, даже если соединение могло быть установлено.
Я называю это как: psql -U postgres -h localhost, так как у меня есть бродячая настройка переадресации портов