#Что означает ошибка
Connection refused 5432
Сообщение «could not connect to server: Connection refused» и вопрос «Is the server running on host … and accepting TCP/IP connections on port 5432?» означают, что по указанному адресу никто не принимает соединения. Это отличается от ошибок аутентификации: до проверки пароля дело не дошло, сервер либо не запущен, либо не слушает нужный интерфейс, либо путь до него закрыт файрволом.
Диагностику стоит начинать с проверки самого сервера на машине, где он установлен, и только затем разбираться с сетью. Так вы быстро определите, где именно оборвана цепочка: служба, конфигурация или сетевой доступ.
Запустите сервер и проверьте listen_addresses и файрвол.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Сервер остановленСлужба. | Проявляется как «Connection refused 5432» или близкий по смыслу сбой. | Запустите. |
| listen_addresseslocalhost. | Проявляется как «Connection refused 5432» или близкий по смыслу сбой. | Измените. |
| ФайрволПорт. | Проявляется как «Connection refused 5432» или близкий по смыслу сбой. | Откройте. |
| ПортДругой. | Проявляется как «Connection refused 5432» или близкий по смыслу сбой. | Проверьте. |
#Пошаговое решение
- Запустите PostgreSQLУбедитесь, что ошибка действительно
Connection refused, а неpassword authentication failed,no pg_hba.conf entryили истечение времени ожидания. В клиенте запишите адрес сервера, номер порта (обычно 5432), имя базы и время. Если подключение удалённое, проверьте, включена ли корпоративная VPN, а затем попробуйте получить ответ от администратора о состоянии сервера.Connection refusedобычно означает, что по указанному адресу и порту нет принимающего процесса либо соединение активно отклоняется; настройкиpg_hba.confна этом этапе обычно ещё не проверялись. - Проверьте, что сервер слушает портНа сервере, где должен работать PostgreSQL, администратор проверяет службу: в Linux выполните
systemctl status postgresql(на Debian с кластерами такжеpg_lsclusters, если команда доступна), в Windows откройтеWin+R → services.mscи найдите службуpostgresql-x64-*. Если служба остановлена, выясните причину по журналу и запустите именно нужный экземпляр; не запускайте случайный кластер со старой базой. После запуска повторите подключение к127.0.0.1с локального сервера. Если служба не стартует, журнал важнее правки сетевых правил. На Linux в терминале сервера выполнитеsudo ss -ltnp | grep 5432(порт замените реальным). Результат вида127.0.0.1:5432означает только локальные подключения;0.0.0.0:5432— прослушивание всех IPv4-адресов. Если список пуст, узнайте действующий порт и путь конфигурации через локальное подключение к нужному кластеру командойSHOW port;иSHOW config_file;; при невозможности подключения прочитайте журнал службы. В Windows проверить порт можно через PowerShellGet-NetTCPConnection -LocalPort 5432 -State Listen. - Разрешите клиента в pg_hba.confЕсли локально всё работает, а удалённое соединение не принимается, администратор проверяет параметры
listen_addressesиportвpostgresql.confконкретного экземпляра. Не ставьтеlisten_addresses='*'по умолчанию: укажите внутренний IP сервера или ограниченный адрес, доступный клиентам. Сохраните прежние значения. Изменениеlisten_addressesтребует перезапуска PostgreSQL, а это прерывает соединения — согласуйте окно обслуживания и резервную копию прежде, чем менять рабочий сервер. После перезапуска повторитеssи убедитесь, что слушается правильный интерфейс. - Откройте портТолько после появления слушающего сокета и подтверждения сетевой достижимости проверяйте правила авторизации
pg_hba.conf. Это отдельная ошибка, обычно имеющая текстno pg_hba.conf entry. Администратор добавляет адресно ограниченное правило для конкретной базы, роли и подсети с современным методом аутентификации, например SCRAM, если он настроен, затем перечитывает конфигурацию черезSELECT pg_reload_conf();. Не открывайтеhost all all 0.0.0.0/0 trust. При ошибке синтаксиса смотрите журнал PostgreSQL и возвращайте резервную копию конфигурации. Если сервер слушает внешний адрес, проверьте связь с клиентского компьютера: в Windows PowerShell выполнитеTest-NetConnection -ComputerName ИМЯ_СЕРВЕРА -Port 5432, в Linux при наличииnc—nc -vz ИМЯ_СЕРВЕРА 5432. Имя и порт замените действительными. Если тест не проходит, администратор проверяет межсетевой экран, облачную группу безопасности и маршрутизацию, разрешая доступ только нужной подсети, а не всему Интернету. Если порт доступен, ноpsqlвыдаёт ошибку пароля, решайте её отдельно. - Проверьте подключениеПосле исправления в терминале клиента выполните
psql -h ИМЯ_СЕРВЕРА -p 5432 -U ИМЯ_ПОЛЬЗОВАТЕЛЯ -d ИМЯ_БАЗЫ, заменив все обозначения реальными значениями; пароль вводится в отдельном запросе, не публикуйте его в истории команд. Ожидаемый результат — приглашениеимя_базы=>, после чего можно выполнитьSELECT current_database(), inet_server_addr();. Если подключение не удалось, сохраните полный текст ошибки, фактический адрес и время и передайте администратору. Не повторяйте изменения конфигурации наугад.
#Сервер не запущен
Проверьте состояние службы командой systemctl status postgresql. Если она остановлена или упала, смотрите журнал (journalctl -u postgresql, файл postgresql-*.log): частые причины — нехватка места на диске, повреждённый файл postmaster.pid после аварийной остановки, несовместимость версий данных после обновления пакета.
#Сервер не слушает внешний адрес
По умолчанию PostgreSQL принимает подключения только с localhost. Чтобы разрешить внешние, задайте в postgresql.conf параметр listen_addresses, а в pg_hba.conf добавьте строку с адресом клиента и методом аутентификации (scram-sha-256). После изменения конфигурации перезапустите службу.
#Файрвол и облачные правила
Откройте порт 5432 только для нужных адресов в ufw, firewalld или облачной группе безопасности. Не публикуйте базу данных во весь интернет: боты ищут открытые PostgreSQL и перебирают пароли. Для удалённой работы безопаснее SSH-туннель или VPN.
# Выполнять на Linux-сервере PostgreSQL:systemctl status postgresqlsudo ss -ltnp | grep 5432# При работающем локальном экземпляре (отдельная проверка):sudo -u postgres psql -c "SHOW port;"