Psql не может подключиться к серверу PostgreSQL (postmaster) по IP и порту 5432?

Пожалуйста, прочитайте, прежде чем отвечать на него как дубликат (как это может случиться). Я запускаю сервер postmaster (postgres). См. Ниже для вывода 'sudo netstat -anp | grep 5432'?

tcp  0  0 127.0.0.1:5432    0.0.0.0:*     LISTEN      29606/postmaster       
unix  2      [ ACC ]     STREAM     LISTENING     1650581 29606/postmaster /var/run/postgresql/.s.PGSQL.5432
unix  2      [ ACC ]     STREAM     LISTENING     1650582 29606/postmaster    /tmp/.s.PGSQL.5432               

Я могу подключиться из localhost с помощью

psql -h localhost (OR 127.0.0.1) -d <DB> -U user -W

Но когда я пытаюсь подключиться с других хостов с помощью tcp, указав

psql -h ip_add_postmaster -d <DB> -U user -W

Он выбрасывает:

psql: не удалось подключиться к серверу: соединение отклонено Сервер работает на хосте XXXXXX и принимает соединения TCP/IP на порту 5432?

Что здесь не так?

pg_hba.conf

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only                  
local   all             all                                     peer  
# IPv4 local connections:                                             
host    all             all             127.0.0.1/32            md5   
# IPv6 local connections:                                             
host    all             all             ::1/128                 md5   

В postgresql.conf,

listen_addresses = 'localhost, 127.0.0.1, ip_add_postmaster'

Note: ip_add_postmaster is same as my Elastic IP and not public DNS. If this information
matters.

Что я здесь делаю неправильно? Машина размещена на Amazon EC2 и открыла порт 5432.

Ответ 1

listen_addresses = 'localhost, private_ip' исправил проблему. Я не смог запустить сервер postmaster на эластичных IP-адресах. Как только сервер postgres запустил localhost и частные IP-адреса, я смог подключиться.

Ответ 2

Как показывает вывод netstat, он прослушивает 127.0.0.1:5432, который является localhost. Это можно подключить только с localhost;)

Установите listen_addresses='*' в свой конфиг, и он будет работать.

[править] Другие вещи для проверки:

  • - брандмауэр Amazon блокирует что-нибудь?
  • iptables блокирует что-нибудь?

Но сначала убедитесь, что адрес прослушивания верен, ваш вывод netstat показывает, что он не будет работать так.

Ответ 3

Еще одна проблема, которую я обнаружил, заключается в том, что вы закончили с двумя установками Postgres, второй может выбрать нестандартный порт (в моем случае это было 5433 i/o 5432). Поэтому проверка порта в postgresql.conf может быть хорошей идеей.

Ответ 4

Я столкнулся с этой проблемой и пробовал всевозможные исправления, которые я нашел через SO, и хочу добавить простое решение, которое сработало для меня, когда я понял, что это связано с разрешениями в моем случае.

Просто, если вы используете psql-сервер в Windows, изначально вы ограничены суперпользователем postgres по умолчанию для входа в систему, запуска сервера и т.д.

Итак, сначала попробуйте запустить из командной строки: psql -U postgres -h localhost -p 5432 и введите свой пароль в командной строке. Если вам удастся войти в систему и сервер встал, это были проблемы с разрешениями. Отсюда вы можете создать роль для себя, которая имеет права доступа к любой базе данных, которую вы пытаетесь запустить.

Если ошибка повторяется, рассмотрите проверку postgresql.conf, как указано выше, чтобы убедиться, что по умолчанию IP установлен на * или localhost, а порт установлен на 5432 или любой другой порт по умолчанию.