Как работает Archiver WAL

  1. WAL-файл заполнен (16 МБ) и больше не активен (текущая запись перешла в следующий файл).
  2. Checkpointer определяет, что этот файл больше не нужен для crash recovery.
  3. Archiver (процесс postgres: archiver) запускает команду из archive_command
  4. Если команда завершается с кодом 0, PostgreSQL считает файл успешно заархивированным и удаляет его из pg_wal/.
  5. Если ошибка — повторяет попытку (и может остановить запись, если archive_mode = on и архив недоступен — это называется архивный stall).

Где хранятся архивные WAL?

  • В внешнем каталоге или системе, указанной в archive_command:
    • Локальный диск: /backup/wal/
    • Сетевая папка: //nas/wal_archive/
    • Облако: через aws s3 cp ... или rclone
    • Ленточный архив, специальные хранилища и т.д.

Как включить архивацию?

postgresql.conf

archive_mode = on
archive_command = 'cp %p /archive/%f'
wal_level = replica   # или выше (обязательно!)
 
# **перезагрузка конфигурации**
SELECT pg_reload_conf();
 
# `%p` — полный путь к WAL-файлу (например, `/var/lib/postgresql/15/main/pg_wal/000000010000000000000001`)
# `%f` — имя файла (например, `000000010000000000000001`)