diff options
author | Robert Haas <rhaas@postgresql.org> | 2022-02-03 13:57:27 -0500 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2022-02-03 14:05:02 -0500 |
commit | 5ef1eefd76f404ddc59b885d50340e602b70f05f (patch) | |
tree | 85146bd90a7039c50498ff09aedbc501468afb65 /src/backend/postmaster/shell_archive.c | |
parent | 7c1aead6cbe7dcc6c216715fed7a1fb60684c5dc (diff) | |
download | postgresql-5ef1eefd76f404ddc59b885d50340e602b70f05f.tar.gz postgresql-5ef1eefd76f404ddc59b885d50340e602b70f05f.zip |
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
Diffstat (limited to 'src/backend/postmaster/shell_archive.c')
-rw-r--r-- | src/backend/postmaster/shell_archive.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/backend/postmaster/shell_archive.c b/src/backend/postmaster/shell_archive.c index b54e701da4d..19e240c2053 100644 --- a/src/backend/postmaster/shell_archive.c +++ b/src/backend/postmaster/shell_archive.c @@ -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]; |