Не вдається підключитися до 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

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

У своєму Vagrantfile я вже додав:

config.vm.forward_port 5432, 5432

але коли я намагаюся запустити psql з localhost, я отримую:

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.

Відповіді:


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Повинен бути запущений корінь (як і все інше в /etc/init.d), а не користувач Postgres.

PGDATA не слід встановлювати вручну, оскільки це дійсно перешкоджає тому, як працюють пакети postgres ubuntu.

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


Я переробляю інсталяцію зараз, але у вашій відповіді ви помітили, що ви сказали, що шлях неправильно зробити, щоб Ubuntu шукав неправильне місце для файла. Можливо, це пов’язано з тим, що клієнт працює на OSX, поки сервер - це поле ubuntu?

Тож я перевстановив і отримав таку саму помилку. Я трохи більше озирнувся і виявив, що у мене не відкриті порти в 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, оскільки у мене є налаштування переадресації бродячих портів

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.