Как работает Archiver WAL
- WAL-файл заполнен (16 МБ) и больше не активен (текущая запись перешла в следующий файл).
- Checkpointer определяет, что этот файл больше не нужен для crash recovery.
- Archiver (процесс
postgres: archiver) запускает команду изarchive_command - Если команда завершается с кодом 0, PostgreSQL считает файл успешно заархивированным и удаляет его из
pg_wal/. - Если ошибка — повторяет попытку (и может остановить запись, если
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`)