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

Драйвер Npgsql ждал ответа от PostgreSQL и не дождался. Причин две, и их легко спутать.

Первая: соединение оборвалось. База перезапустилась, сессию завершили, сеть между сервером приложений и базой моргнула, межсетевой экран закрыл давно молчавшее соединение. Тогда рядом обычно видны 57P01 или No suitable host was found.

Вторая: запрос шёл дольше таймаута команды. Npgsql в этом случае пишет ту же фразу, а во внутреннем исключении стоит TimeoutException. В интерфейсе RX это бывает как «Evaluation failure on GetAll()» при открытии списка или отчёта.

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

  1. Внутреннее исключение: TimeoutException означает долгий запрос, IOException или SocketException означает обрыв.
  2. Для обрыва: журнал PostgreSQL за ту же минуту и журнал сетевого оборудования.
  3. Для долгого запроса: найти его в pg_stat_statements или в журнале медленных запросов:
select round(mean_exec_time) ms, calls, left(query, 120)
from pg_stat_statements order by mean_exec_time desc limit 20;

Что сделать

  1. Обрыв из-за сети: проверить таймауты простоя на межсетевом экране между приложением и базой, включить tcp_keepalives_idle в PostgreSQL короче этого таймаута.
  2. Долгий запрос: смотреть план (explain analyze), чаще всего не хватает индекса. Поднимать таймаут без разбора не стоит: пользователь всё равно будет ждать.
  3. Если ошибки идут всплеском вместе с переключением базы, отдельного разбора не нужно.