Ошибки

PostgreSQL: no pg_hba.conf entry for host — что делать

Подключение дошло до базы, но в файле pg_hba.conf нет строки, которая разрешает его: с этого адреса, этому пользователю, к этой базе. Нужно добавить строку для одного адреса и перечитать настройки. Перезапуск не нужен.

≈ 5 мин чтения3 шага
Содержание 8

Как выглядит ошибка

FATAL:  no pg_hba.conf entry for host "203.0.113.5", user "ivan", database "shop", no encryption

psql или сайт показывают эту строку после слов connection to server at … failed:. Что в ней:

  • host "203.0.113.5" — адрес, с которого пришло подключение, как его видит база. Это адрес компьютера или сервера, откуда подключаются, а не адрес базы.
  • user "ivan" и database "shop" — под каким пользователем и к какой базе.
  • no encryption — подключение без шифрования. Бывает SSL encryption — с шифрованием SSL, и GSS encryption — с шифрованием GSSAPI.

Раз база ответила, сеть и порт в порядке. Не пустил файл pg_hba.conf.

Как устроен pg_hba.conf

Каждая строка файла — правило: тип подключения, база, пользователь, адрес и способ проверки. База читает строки сверху вниз и берёт первую подходящую. Если не подошла ни одна, вход запрещён — это и есть ошибка.

ТипКакие подключения
localчерез файл-сокет на самом сервере
hostпо сети, с шифрованием SSL или без
hostsslпо сети, только с шифрованием SSL
hostnosslпо сети, только без SSL

Файл лежит в папке настроек базы: /etc/postgresql/16/main/pg_hba.conf. В примерах — PostgreSQL 16 из Ubuntu 24.04. В Ubuntu 26.04 ставится PostgreSQL 18: в путях и командах вместо 16 подставьте 18.

Шаг 1. Проверьте, нужно ли это подключение

  • Сайт и база на одном сервере, а в сообщении — внешний адрес сервера. В настройках сайта указан внешний адрес базы. Поставьте 127.0.0.1: для него Ubuntu уже разрешает вход по паролю.
  • Адрес в сообщении незнакомый, а вы ничего не подключали. Это чужая попытка войти: база слушает внешний адрес, и порт 5432 открыт. Строку для такого адреса не добавляйте, а закройте порт — как не открыть базу всему интернету.
  • Адрес ваш: другой сервер с сайтом или ваш компьютер. Переходите к шагу 2. Для своего компьютера удобнее SSH-туннель без правки pg_hba.conf — как подключиться через туннель.

Шаг 2. Добавьте строку для одного адреса

Откройте файл на сервере с базой:

sudo nano /etc/postgresql/16/main/pg_hba.conf

В конец файла добавьте строку. Вместо shop — имя базы, вместо ivan — имя пользователя, вместо 203.0.113.5 — адрес из сообщения об ошибке:

hostssl shop ivan 203.0.113.5/32 scram-sha-256

/32 значит ровно один адрес. scram-sha-256 — вход по паролю, который не передаётся по сети в открытом виде. hostssl пускает только подключения с шифрованием SSL.

Если в сообщении было no encryption, программа подключается без шифрования, и строка hostssl ей не подойдёт. Включите шифрование в настройках программы или напишите в начале строки host вместо hostssl.

Сохраните файл: в nano — Ctrl+O и Enter, выйти — Ctrl+X.

Не пишите вместо адреса 0.0.0.0/0 или all, а вместо способа проверки — trust: первое пустит к базе с любого адреса, второе — без пароля.

Шаг 3. Перечитайте настройки

sudo pg_ctlcluster 16 main reload

Команда перечитывает настройки без перезапуска: подключённые сайты не отключатся. Затем подключитесь снова.

Проверить, нет ли в файле ошибок, можно в psql администратора: войдите командой sudo -u postgres psql и выполните

SELECT line_number, error FROM pg_hba_file_rules WHERE error IS NOT NULL;

Если ответ без строк, ошибок нет. Иначе в столбце error — что не так, в line_number — номер строки файла.

Если ошибка не изменилась

  • Проверьте, тот ли это файл. На сервере может быть несколько баз PostgreSQL — список покажет pg_lsclusters. Путь к файлу текущей базы покажет команда SHOW hba_file; в psql администратора.
  • Имена базы и пользователя в строке должны совпадать с теми, что в сообщении об ошибке.
  • Адрес берите из сообщения: база видит адрес, с которого подключение пришло к ней.
  • Если теперь пишет password authentication failed — строка сработала, не подошёл пароль: разбор.
  • Если вместо этой ошибки Connection refused или долгое ожидание, подключение до базы не доходит: разбор Connection refused.

Источники

Сверено 14 октября 2026 года.

Что почитать дальше