PostgreSQL LinuxWindowsmacOS

PostgreSQL: no pg_hba.conf entry for host

  • Обновлено
  • Чтение ≈ 5 минут
  • Нужны права администратора

Краткий ответ

Ошибка PostgreSQL «no pg_hba.conf entry for host» или «could not connect to server» устраняется правкой pg_hba.conf, listen_addresses, проверкой службы, порта 5432, файрвола и метода аутентификации. После изменений перезагрузите конфигурацию.

В этой статье
  1. Два разных случая
  2. Причины
  3. Порядок
  4. Расположение файлов
PostgreSQL pg_hba error
psql: error: connection to server at "10.0.0.5", port 5432 failed: FATAL: no pg_hba.conf entry for host "10.0.0.7", user "app", database "appdb", no encryption
По-русскиСервер отклонил подключение: нет правила доступа.

#Два разных случая

Сообщения бывают двух типов. could not connect to server: Connection refused — сервер недоступен: служба не запущена, не слушает нужный адрес, порт закрыт файрволом. FATAL: no pg_hba.conf entry for host ... — сервер доступен, но правила аутентификации в pg_hba.conf не содержат записи для вашего клиента (адрес, пользователь, база, SSL). Диагностика начинается с определения типа ошибки.

#Причины

Возможная причинаКак узнатьЧто делать
Нет строки в pg_hba.confАдрес клиента не разрешён.no pg_hba.conf entry.Добавьте строку.
Сервер слушает только localhostПо умолчанию.Connection refused извне.Измените listen_addresses.
Служба не запущенаСбой.Порт не слушается.Запустите, смотрите журнал.
Закрыт портФайрвол.nc не подключается.Откройте для нужных адресов.
Неверный метод или парольscram vs md5.password authentication failed.Сбросьте пароль, проверьте метод.
Требуется SSLhostssl.no encryption.Подключайтесь с sslmode=require.

#Порядок

  1. Проверьте, запущен ли PostgreSQLСообщение именно no pg_hba.conf entry уже означает, что сервер PostgreSQL принял попытку соединения, но не нашёл разрешающего правила для адреса, пользователя и базы. Поэтому вначале запишите из ошибки IP клиента, имя роли, название базы и наличие SSL encryption/no encryption. Если соединение вообще «refused» или «timed out», только тогда на сервере Linux откройте терминал и проверьте sudo systemctl status postgresql --no-pager; конкретный экземпляр может иметь другое имя службы. Строка active (running) означает запуск службы, но не подтверждает настройки доступа.
  2. Проверьте, на каких адресах и порту он слушаетНа сервере Linux в терминале выполните sudo -u postgres psql -c "SHOW listen_addresses;" -c "SHOW port;" (только если локальный вход под postgres разрешён). Если вывод localhost, удалённые подключения недоступны; в других установках значение может задаваться отдельно. Для уже полученной ошибки no pg_hba.conf entry обычно не требуется менять listen_addresses, ведь соединение дошло до сервера. Адрес/порт уточните у администратора базы; для параметра listen_addresses необходим перезапуск, а не только перечитывание конфигурации.
  3. Проверьте доступность порта с клиентаНа компьютере приложения откройте терминал и проверьте достижимость фактического сервера: nc -zv 10.0.0.5 5432 (Linux/macOS; замените адрес и порт). Затем попробуйте psql с отдельными параметрами host/dbname/user. Если ошибка повторяется с текстом no pg_hba.conf entry, переходите к правилам доступа. Если Connection refused/timed out, сначала разбирайтесь с сетью, портом и брандмауэром, а не с паролем.
  4. Найдите файл pg_hba.confНа сервере с правами администрирования БД выполните в psql: SHOW hba_file; и скопируйте полученный абсолютный путь — он надёжнее предполагаемого /etc/postgresql/16/main/pg_hba.conf. Сделайте резервную копию файла (например, sudo cp /путь/pg_hba.conf /путь/pg_hba.conf.bak с реальным путём) и откройте его через sudo nano или другой штатный редактор. На управляемом хостинге запросите изменение у администратора.
  5. Добавьте строку для вашего клиентаДобавьте отдельное правило только для требуемой базы, роли и IP клиента, например host appdb app 10.0.0.7/32 scram-sha-256 для одного IPv4-адреса. Перед сохранением замените appdb, app и адрес своими данными; не вводите /32 для динамической подсети, пока не согласуете диапазон. Учитывайте порядок: PostgreSQL использует ПЕРВОЕ подходящее правило, последующие не проверяются. Для соединений, где обязателен TLS, выбирают hostssl после настройки серверного TLS; trust и 0.0.0.0/0 не используйте.
  6. Перезагрузите конфигурациюСохраните файл (Ctrl+O, Enter, Ctrl+X в nano). Выполните sudo -u postgres psql -c "SELECT pg_reload_conf();"; ответ t означает, что запрос на перечитывание принят, а не что все правила верны. В psql выполните SELECT line_number,error FROM pg_hba_file_rules WHERE error IS NOT NULL;: результат без строк означает, что представленные правила разобраны без диагностированных ошибок. На Windows новые соединения могут учитывать правки pg_hba.conf сразу; полный перезапуск PostgreSQL для изменения только этого файла не нужен.
  7. Проверьте пользователя и пароль, шифрование пароляПовторите psql с клиентского компьютера и прочитайте новое сообщение. password authentication failed означает, что правило теперь подходит, но учётные данные неверны; не ослабляйте метод на trust. Проверьте точное имя пользователя, пароль и совпадение способа аутентификации с настройками сервера. После успешного входа выполните SELECT current_user, current_database();, чтобы исключить подключение не к той базе.
  8. Откройте порт в файрволеТолько если подключение не достигает PostgreSQL вовсе и проверка порта неуспешна, проверьте брандмауэр. На сервере с UFW администратор может разрешить входящий TCP 5432 только с установленного IP приложения: sudo ufw allow from 10.0.0.7 to any port 5432 proto tcp (IP заменить). Проверьте также сетевые группы облака и маршрутизацию; никакие изменения брандмауэра не исправят неверное правило pg_hba.conf, если сервер уже отвечает этим сообщением.
  9. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Служба и порт
    Linux · Терминал (Bash)КомандаНужен sudo
    Служба и порт
    sudo systemctl status postgresql --no-pager
    sudo ss -tlnp | grep 5432
    sudo -u postgres psql -c "SHOW listen_addresses;" -c "SHOW port;" -c "SHOW hba_file;"
    Вариант 2Проверка доступности порта с клиента
    Linux · Терминал (Bash)Команда
    Проверка доступности порта с клиента
    nc -zv 10.0.0.5 5432
    psql "host=10.0.0.5 port=5432 dbname=appdb user=app" -c "SELECT 1"
    Вариант 3Строка конфигурационного файла, НЕ команда; подставьте реальные базу, роль, IP
    ТекстКоманда
    Строка конфигурационного файла, НЕ команда; подставьте реальные базу, роль, IP
    # Пример для сервера с Linux и доступом администратора БД
    # TYPE DATABASE USER ADDRESS METHOD
    host appdb app 10.0.0.7/32 scram-sha-256
    Вариант 4Необязательный пример параметров postgresql.conf: требуется только если сервер не слушает нужный интерфейс;…
    ТекстКоманда
    Необязательный пример параметров postgresql.conf: требуется только если сервер не слушает нужный интерфейс; для listen_addresses нужен перезапуск
    listen_addresses = 'localhost,10.0.0.5'
    port = 5432
    Вариант 5Изменение listen_addresses требует отдельного запланированного перезапуска службы, не выполняйте оба действ…
    Linux · Терминал (Bash)КомандаНужен sudo
    Изменение listen_addresses требует отдельного запланированного перезапуска службы, не выполняйте оба действия подряд
    # Только после изменения pg_hba.conf (Linux)
    sudo -u postgres psql -c "SELECT pg_reload_conf();"
    sudo -u postgres psql -c "SELECT line_number,error FROM pg_hba_file_rules WHERE error IS NOT NULL;"
    Вариант 6Разрешение сетевого доступа только по согласованию с администратором; адрес примерный
    Linux · Терминал (Bash)Риск потери данныхНужен sudo
    Разрешение сетевого доступа только по согласованию с администратором; адрес примерный
    # ОТКРЫВАЕТ ДОСТУП: пример для одного доверенного IP, при необходимости
    sudo ufw allow from 10.0.0.7 to any port 5432 proto tcp

    Эта команда может привести к потере данных или существенным изменениям. Проверьте параметры, резервную копию и возможность отката.

#Расположение файлов

В Debian/Ubuntu файлы лежат в /etc/postgresql/16/main/ (версия может отличаться), в RHEL — /var/lib/pgsql/16/data/. Точный путь покажет SHOW hba_file;. Журнал: /var/log/postgresql/postgresql-16-main.log. На Linux и большинстве Unix-систем pg_hba.conf перечитывается после pg_reload_conf() без обрыва подключений; в Windows изменения этого файла учитываются для новых соединений сразу. Изменение listen_addresses требует перезапуска экземпляра PostgreSQL.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.