Что это значит

Сервисы Directum RX ходят в PostgreSQL через драйвер Npgsql. Когда в строке подключения указано несколько серверов или требуется только ведущий (Target Session Attributes=primary), драйвер перебирает их по очереди. Если ни один не ответил или ни один не оказался ведущим, появляется эта ошибка. Пользователи в этот момент получают ошибки при любом действии.

Чаще всего она идёт всплеском на несколько минут: база перезапускалась, реплика становилась ведущей, плавающий адрес переезжал на другой сервер. Если ошибка держится дольше, база недоступна по-настоящему.

Как проверить

  1. Внутреннее исключение в той же записи лога: там видно, на каком адресе и почему не получилось (отказ в соединении, таймаут, 57P03).
  2. Жива ли база и кто сейчас ведущий:
select pg_is_in_recovery();

false означает ведущий сервер.

  1. С сервера приложений проверить порт:
nc -zv <адрес базы> 5432
  1. Если используется плавающий адрес (VIP), он должен стоять на ведущем сервере, а не на реплике.

Что сделать

  1. Если ошибки совпали с перезапуском или переключением базы, сервисы переподключатся сами. Достаточно убедиться, что всплеск закончился.
  2. Если база жива, а ошибка продолжается: проверить сеть и межсетевой экран между сервером приложений и базой, listen_addresses и pg_hba.conf.
  3. Если при переключении адрес остаётся на старом ведущем, сервисы будут упираться в реплику. Это настраивается в том, что управляет адресом (keepalived, Patroni и подобные).
  4. Поставить алерт на доступность базы и на число таких ошибок в логах: всплеск после переключения нормален, ровный поток нет.