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

Реплика PostgreSQL получает журнал изменений (WAL) с ведущего сервера. Если она отстала, а ведущий уже удалил старые сегменты журнала, догнать не получится: нужного куска нет. Реплика перестаёт обновляться, и если на неё рассчитывали при аварии, рассчитывать уже не на что.

Так бывает после долгого простоя реплики, сетевых проблем или всплеска изменений на ведущем, когда журнал вращается быстрее, чем реплика успевает.

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

  1. На ведущем: подключена ли реплика и насколько отстаёт:
select client_addr, state, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn)) lag
from pg_stat_replication;
  1. Есть ли слот репликации и активен ли он: select * from pg_replication_slots;
  2. Есть ли архив журнала, из которого реплика могла бы взять недостающее (restore_command).

Что сделать

  1. Пересоздать реплику с ведущего сервера (pg_basebackup или средствами вашего кластера).
  2. Чтобы не повторилось: использовать слот репликации или настроить restore_command из архива WAL. Слот держит журнал до тех пор, пока реплика его не заберёт.
  3. У слота есть обратная сторона: если реплика пропадёт надолго, журнал будет копиться на ведущем и может заполнить диск. Ограничить это помогает max_slot_wal_keep_size и алерт на неактивный слот.