Функцию ведущего сервера вызвали на реплике
«ERROR: recovery is in progress» и «WAL control functions cannot be executed during recovery» в PostgreSQL: запрос выполняет на реплике функцию, которая работает только на ведущем сервере. Обычно это мониторинг или скрипт, который не проверяет роль сервера.
Что это значит
Реплика PostgreSQL находится в режиме восстановления: она только применяет журнал ведущего сервера. Часть функций на ней не работает, например pg_current_wal_lsn(), pg_switch_wal(), создание точек восстановления. Если запрос вызывает такую функцию на реплике, приходит эта ошибка.
Чаще всего её вызывает запрос мониторинга или резервного копирования, который одинаково выполняется на всех серверах кластера и не проверяет, ведущий ли это сервер. Например, запрос отставания слотов репликации через pg_current_wal_lsn().
Как проверить
- Строка
STATEMENT:рядом с ошибкой: какой запрос и от какого пользователя. - Роль сервера:
SELECT pg_is_in_recovery();вернётtна реплике.
Что сделать
- В запросах мониторинга проверять роль сервера: выполнять функцию ведущего сервера только при
pg_is_in_recovery() = false. - На реплике пользоваться её функциями:
pg_last_wal_receive_lsn()иpg_last_wal_replay_lsn().
Ошибка повторяется?
Запустите Диагностика: за полминуты он покажет состояние базы, брокера, поиска и сервера. С отчётом разберём причину за 30 минут бесплатного созвона.
Написать