Подтвердить что ты не робот

Не удается подключиться к postgres с удаленного хоста

У меня есть сервер базы данных (192.168.1.50), который запускает postgres. Я создал базу данных с именем "testdb" и пользовательский "testuser" с паролем "testuserpw".
Локально я могу подключиться к db, используя:

psql -d testdb -U testuser

Когда я выдаю команду с другого хоста (192.168.1.60):

psql -h 192.168.1.50 -d testdb -U testuser

У меня есть ошибка:

psql: could not connect to server: Connection refused
Is the server running on host "192.168.1.50" and accepting
TCP/IP connections on port 5432?

Любая идея?

4b9b3361

Ответ 1

Проверьте настройку listen_addresses в файле postgresql.conf. Многие дистрибутивы делают его по умолчанию 127.0.0.1, т.е. Прослушивают только соединения, поступающие с локального хоста. Он должен быть установлен на '*' для прослушивания соединений на всех интерфейсах.

Если у вас все еще есть проблемы, используйте lsof, чтобы узнать, какие сетевые сокеты прослушивает процесс postgres.

Ответ 2

В Ubuntu я заметил, что удаленный доступ в какой-то момент перестает работать (в настоящее время используется 9.1.9). Причина в том, что postgres больше не запускается с ключом -i [1], поэтому независимо от того, что вы настраиваете для listen_addresses, он будет проигнорирован.

К счастью, добавление следующей строки в /etc/environment решает проблему после выхода из системы и снова (или перезагрузки):

PGOPTIONS="-i"

Подробнее см. в [2]. Обратите внимание, что добавление этого параметра в /etc/postgresql/9.1/main/environment НЕ работало для меня.

Теперь, когда я делаю nmap ip-of-my-remote-server, я снова получаю это:

5432/tcp open  postgresql

Yay!

[1] http://www.postgresql.org/docs/9.1/static/runtime-config-short.html

[2] http://www.postgresql.org/docs/9.1/static/libpq-envars.html

Ответ 3

Является ли брандмауэр разрешающим подключение? Или, проверьте, разрешено ли pg_hba.conf подключение с адресов, отличных от localhost.

Ответ 4

Конфигурация listen_address в postgresql.conf - это не единственный способ получить postgres для прослушивания нелокального IP-адреса (или адресов).

Используйте опцию "-o -h *", если вы начинаете postgres из pg_ctl, иначе добавьте "-h" "*" в командную строку postgres, например,

/usr/local/pgsql/bin/postgres -D/pg/data "-h" "*"

Конечно/pg/data должны быть изменены на текущую дату.

Это особенно полезно при экспериментировании.