mirror of
https://github.com/postgres/postgres.git
synced 2026-03-19 09:05:11 -04:00
A new callback named startup_cb, called shortly after a module is
loaded, is added. This makes possible the initialization of any
additional state data required by a module. This initial state data can
be saved in a ArchiveModuleState, that is now passed down to all the
callbacks that can be defined in a module. With this design, it is
possible to have a per-module state, aimed at opening the door to the
support of more than one archive module.
The initialization of the callbacks is changed so as
_PG_archive_module_init() does not anymore give in input a
ArchiveModuleCallbacks that a module has to fill in with callback
definitions. Instead, a module now needs to return a const
ArchiveModuleCallbacks.
All the structure and callback definitions of archive modules are moved
into their own header, named archive_module.h, from pgarch.h.
Command-based archiving follows the same line, with a new set of files
named shell_archive.{c,h}.
There are a few more items that are under discussion to improve the
design of archive modules, like the fact that basic_archive calls
sigsetjmp() by itself to define its own error handling flow. These will
be adjusted later, the changes done here cover already a good portion
of what has been discussed.
Any modules created for v15 will need to be adjusted to this new
design.
Author: Nathan Bossart
Reviewed-by: Andres Freund
Discussion: https://postgr.es/m/20230130194810.6fztfgbn32e7qarj@awork3.anarazel.de
24 lines
698 B
C
24 lines
698 B
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* shell_archive.h
|
|
* Exports for archiving via shell.
|
|
*
|
|
* Copyright (c) 2022-2023, PostgreSQL Global Development Group
|
|
*
|
|
* src/include/archive/shell_archive.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef _SHELL_ARCHIVE_H
|
|
#define _SHELL_ARCHIVE_H
|
|
|
|
#include "archive/archive_module.h"
|
|
|
|
/*
|
|
* Since the logic for archiving via a shell command is in the core server
|
|
* and does not need to be loaded via a shared library, it has a special
|
|
* initialization function.
|
|
*/
|
|
extern const ArchiveModuleCallbacks *shell_archive_init(void);
|
|
|
|
#endif /* _SHELL_ARCHIVE_H */
|