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

Реплика PostgreSQL находится в режиме восстановления: она только применяет журнал ведущего сервера. Часть функций на ней не работает, например pg_current_wal_lsn(), pg_switch_wal(), создание точек восстановления. Если запрос вызывает такую функцию на реплике, приходит эта ошибка.

Чаще всего её вызывает запрос мониторинга или резервного копирования, который одинаково выполняется на всех серверах кластера и не проверяет, ведущий ли это сервер. Например, запрос отставания слотов репликации через pg_current_wal_lsn().

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

  1. Строка STATEMENT: рядом с ошибкой: какой запрос и от какого пользователя.
  2. Роль сервера: SELECT pg_is_in_recovery(); вернёт t на реплике.

Что сделать

  1. В запросах мониторинга проверять роль сервера: выполнять функцию ведущего сервера только при pg_is_in_recovery() = false.
  2. На реплике пользоваться её функциями: pg_last_wal_receive_lsn() и pg_last_wal_replay_lsn().