50.2. Обработчики модулей архивирования #

Обработчики архивирования определяют, как именно модуль будет выполнять архивирование. Сервер будет вызывать их по мере необходимости для обработки каждого отдельного файла WAL.

50.2.1. Обработчик запуска #

Обработчик startup_cb вызывается вскоре после загрузки модуля. Этот обработчик можно использовать для любой необходимой дополнительной инициализации. Если есть данные о состоянии модуля архивирования, обработчик может использовать state->private_data для их хранения.

typedef void (*ArchiveStartupCB) (ArchiveModuleState *state);

50.2.2. Обработчик проверки #

Обработчик check_configured_cb вызывается, чтобы проверить, полностью ли настроен модуль и готов ли он принимать файлы WAL (в частности, что для его параметров конфигурации установлены допустимые значения). Если функция check_configured_cb не определена, сервер всегда предполагает, что модуль готов к работе.

typedef bool (*ArchiveCheckConfiguredCB) (ArchiveModuleState *state);

Если возвращается true, сервер перейдёт к архивированию файла, вызвав обработчик archive_file_cb. Если возвращается false, архивирование не производится и архиватор выдаст в журнал сервера следующее сообщение:

ВНИМАНИЕ: включён режим archive_mode, но архивирование не настроено

В последнем случае сервер будет периодически вызывать эту функцию, и архивирование начнётся только тогда, когда она вернёт true.

50.2.3. Обработчик архивирования #

Обработчик archive_file_cb вызывается для архивирования одного файла WAL.

typedef bool (*ArchiveFileCB) (ArchiveModuleState *state, const char *file, const char *path);

Если возвращается true, сервер считает, что файл был успешно заархивирован, и может переработать или удалить исходный файл WAL. Если возвращается false, сервер сохранит исходный файл WAL и повторит попытку архивирования позже. Аргумент файл содержит только имя архивируемого файла WAL, а путь содержит полный путь к файлу WAL (включая имя файла).

50.2.4. Обработчик выключения #

Обработчик shutdown_cb вызывается, когда завершается процесс архиватора (например, после ошибки) или изменяется значение archive_library. Если функция shutdown_cb не определена, никакие специальные действия в этих случаях не предпринимаются. Если есть данные о состоянии модуля архивирования, этот обработчик должен удалить их во избежание утечек.

typedef void (*ArchiveShutdownCB) (ArchiveModuleState *state);