Клиент пропал во время работы с базой
«FATAL: connection to client lost» и «could not receive data from client: Connection reset by peer» в журнале PostgreSQL: соединение с клиентом оборвалось посреди сессии. Перезапуск приложения, сетевой сбой или балансировщик, закрывающий простаивающие соединения.
Что это значит
PostgreSQL пытался отправить клиенту данные или прочитать от него команду, а соединения уже нет. Сессия завершается, её незавершённая транзакция откатывается.
Обычные причины: приложение или под перезапустился и не закрыл соединения; оборвалась сеть; между приложением и базой стоит балансировщик или межсетевой экран, который разрывает соединения после простоя.
Как проверить
- Совпадает ли время с перезапуском приложения: тогда записи идут пачкой и это нормально.
- Адрес клиента в журнале (
%hвlog_line_prefix): один ли это сервер или все сразу. - Есть ли между клиентом и базой устройство с таймаутом простоя соединений.
Что сделать
- Пачки записей при перезапуске приложений не разбирать.
- Если соединения рвутся после простоя, включить проверку соединений в пуле приложения или TCP keepalive на стороне PostgreSQL (
tcp_keepalives_idle), чтобы соединение не считалось простаивающим. - Если обрывы случайные и частые, разбирать сеть между приложением и базой.
Ошибка повторяется?
Запустите Диагностика: за полминуты он покажет состояние базы, брокера, поиска и сервера. С отчётом разберём причину за 30 минут бесплатного созвона.
Написать