On Wed, Oct 05, 2022 at 07:55:58PM +0200, Peter Eisentraut wrote: > Leaving archive_command empty is an intentional configuration choice. > > What we are talking about here is, arguably, a misconfiguration, so it > should result in an error.
Okay. What do you think about something like the attached? -- Nathan Bossart Amazon Web Services: https://aws.amazon.com
diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index d750290f13..bb4d985f35 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -3597,9 +3597,11 @@ include_dir 'conf.d' </para> <para> This parameter can only be set in the <filename>postgresql.conf</filename> - file or on the server command line. It is ignored unless + file or on the server command line. It is only used if <varname>archive_mode</varname> was enabled at server start and - <varname>archive_library</varname> is set to an empty string. + <varname>archive_library</varname> is set to an empty string. If both + <varname>archive_command</varname> and <varname>archive_library</varname> + are set, archiving will fail. If <varname>archive_command</varname> is an empty string (the default) while <varname>archive_mode</varname> is enabled (and <varname>archive_library</varname> is set to an empty string), WAL archiving is temporarily @@ -3624,7 +3626,9 @@ include_dir 'conf.d' <para> The library to use for archiving completed WAL file segments. If set to an empty string (the default), archiving via shell is enabled, and - <xref linkend="guc-archive-command"/> is used. Otherwise, the specified + <xref linkend="guc-archive-command"/> is used. If both + <varname>archive_command</varname> and <varname>archive_library</varname> + are set, archiving will fail. Otherwise, the specified shared library is used for archiving. For more information, see <xref linkend="backup-archiving-wal"/> and <xref linkend="archive-modules"/>. diff --git a/src/backend/postmaster/pgarch.c b/src/backend/postmaster/pgarch.c index 3868cd7bd3..56dcc0dce5 100644 --- a/src/backend/postmaster/pgarch.c +++ b/src/backend/postmaster/pgarch.c @@ -838,6 +838,12 @@ LoadArchiveLibrary(void) memset(&ArchiveContext, 0, sizeof(ArchiveModuleCallbacks)); + if (XLogArchiveLibrary[0] != '\0' && XLogArchiveCommand[0] != '\0') + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("both archive_command and archive_library specified"), + errdetail("Only one of archive_command, archive_library may be set."))); + /* * If shell archiving is enabled, use our special initialization function. * Otherwise, load the library and call its _PG_archive_module_init().