Не удается подключиться к 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?
Любая идея?
Ответы
Ответ 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 должны быть изменены на текущую дату.
Это особенно полезно при экспериментировании.