49.2. Обработчики модулей архивирования #
Обработчики архивирования определяют, как именно модуль будет выполнять архивирование. Сервер будет вызывать их по мере необходимости для обработки каждого отдельного файла WAL.
49.2.1. Обработчик запуска #
Обработчик startup_cb
вызывается вскоре после загрузки модуля. Этот обработчик можно использовать для любой необходимой дополнительной инициализации. Если есть данные о состоянии модуля архивирования, обработчик может использовать state->private_data
для их хранения.
typedef void (*ArchiveStartupCB) (ArchiveModuleState *state);
49.2.2. Обработчик проверки #
Обработчик check_configured_cb
вызывается, чтобы проверить, полностью ли настроен модуль и готов ли он принимать файлы WAL (в частности, что для его параметров конфигурации установлены допустимые значения). Если функция check_configured_cb
не определена, сервер всегда предполагает, что модуль готов к работе.
typedef bool (*ArchiveCheckConfiguredCB) (ArchiveModuleState *state);
Если возвращается true
, сервер перейдёт к архивированию файла, вызвав обработчик archive_file_cb
. Если возвращается false
, архивирование не производится и архиватор выдаст в журнал сервера следующее сообщение:
ВНИМАНИЕ: включён режим archive_mode, но архивирование не настроено
В последнем случае сервер будет периодически вызывать эту функцию, и архивирование начнётся только тогда, когда она вернёт true
.
Примечание
Может быть полезно добавить дополнительную информацию к общему тексту предупреждения, когда функция возвращает false
. Для этого добавьте сообщение в макрос arch_module_check_errdetail
перед возвратом false
. Как и errdetail()
, этот макрос принимает строку формата с необязательным списком аргументов. Строка, переданная в макрос, будет выведена как строка DETAIL
в предупреждающем сообщении.
49.2.3. Обработчик архивирования #
Обработчик archive_file_cb
вызывается для архивирования одного файла WAL.
typedef bool (*ArchiveFileCB) (ArchiveModuleState *state, const char *file, const char *path);
Если возвращается true
, сервер считает, что файл был успешно заархивирован, и может переработать или удалить исходный файл WAL. Если возвращается false
или возникает ошибка, сервер сохраняет исходный файл WAL и повторяет попытку архивирования позже. Аргумент файл
содержит только имя архивируемого файла WAL, а путь
содержит полный путь к файлу WAL (включая имя файла).
Примечание
Обработчик archive_file_cb
вызывается в кратковременном контексте памяти, который будет сбрасываться между вызовами. Если нужен долгоживущий контекст, создайте его в обработчике startup_cb
.
49.2.4. Обработчик выключения #
Обработчик shutdown_cb
вызывается, когда завершается процесс архиватора (например, после ошибки) или изменяется значение archive_library. Если функция shutdown_cb
не определена, никакие специальные действия в этих случаях не предпринимаются. Если есть данные о состоянии модуля архивирования, этот обработчик должен удалить их во избежание утечек.
typedef void (*ArchiveShutdownCB) (ArchiveModuleState *state);