1
0
mirror of https://github.com/postgres/postgres.git synced 2025-08-24 09:27:52 +03:00

Allow archiving via loadable modules.

Running a shell command for each file to be archived has a lot of
overhead and may not offer as much error checking as you want, or the
exact semantics that you want. So, offer the option to call a loadable
module for each file to be archived, rather than running a shell command.

Also, add a 'basic_archive' contrib module as an example implementation
that archives to a local directory.

Nathan Bossart, with a little bit of kibitzing by me.

Discussion: http://postgr.es/m/20220202224433.GA1036711@nathanxps13
This commit is contained in:
Robert Haas
2022-02-03 13:57:27 -05:00
parent 7c1aead6cb
commit 5ef1eefd76
26 changed files with 941 additions and 67 deletions

View File

@@ -2,6 +2,10 @@
*
* shell_archive.c
*
* This archiving function uses a user-specified shell command (the
* archive_command GUC) to copy write-ahead log files. It is used as the
* default, but other modules may define their own custom archiving logic.
*
* Copyright (c) 2022, PostgreSQL Global Development Group
*
* IDENTIFICATION
@@ -17,7 +21,25 @@
#include "pgstat.h"
#include "postmaster/pgarch.h"
bool
static bool shell_archive_configured(void);
static bool shell_archive_file(const char *file, const char *path);
void
shell_archive_init(ArchiveModuleCallbacks *cb)
{
AssertVariableIsOfType(&shell_archive_init, ArchiveModuleInit);
cb->check_configured_cb = shell_archive_configured;
cb->archive_file_cb = shell_archive_file;
}
static bool
shell_archive_configured(void)
{
return XLogArchiveCommand[0] != '\0';
}
static bool
shell_archive_file(const char *file, const char *path)
{
char xlogarchcmd[MAXPGPATH];