Allow restore_command parameter to be changed with reload.
authorFujii Masao <fujii@postgresql.org>
Wed, 2 Dec 2020 02:00:15 +0000 (11:00 +0900)
committerFujii Masao <fujii@postgresql.org>
Wed, 2 Dec 2020 02:00:15 +0000 (11:00 +0900)
This commit changes restore_command from PGC_POSTMASTER to PGC_SIGHUP.

As the side effect of this commit, restore_command can be reset to
empty during archive recovery. In this setting, archive recovery
tries to replay only WAL files available in pg_wal directory. This is
the same behavior as when the command that always fails is specified
in restore_command.

Note that restore_command still must be specified (not empty) when
starting archive recovery, even after applying this commit. This is
necessary as the safeguard to prevent users from forgetting to
specify restore_command and starting archive recovery.

Thanks to Peter Eisentraut, Michael Paquier, Andres Freund,
Robert Haas and Anastasia Lubennikova for discussion.

Author: Sergei Kornilov
Reviewed-by: Kyotaro Horiguchi, Fujii Masao
Discussion: https://postgr.es/m/2317771549527294@sas2-985f744271ca.qloud-c.yandex.net

doc/src/sgml/config.sgml
src/backend/utils/misc/guc.c
src/backend/utils/misc/postgresql.conf.sample

index f810789ea82bb40cdab53e24b6b99aede52460bf..8cd3d6901c573c90ceaca33f3b6dfbcd662ed4c3 100644 (file)
@@ -3567,7 +3567,8 @@ restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"'  # Windows
        </para>
 
        <para>
-        This parameter can only be set at server start.
+        This parameter can only be set in the <filename>postgresql.conf</filename>
+        file or on the server command line.
        </para>
       </listitem>
      </varlistentry>
index 245a3472bc8e11f421fdfb30dbd82e48f6e0784e..02d2d267b5c34b46063b63c94dd81860aa1fd9b6 100644 (file)
@@ -3699,7 +3699,7 @@ static struct config_string ConfigureNamesString[] =
    },
 
    {
-       {"restore_command", PGC_POSTMASTER, WAL_ARCHIVE_RECOVERY,
+       {"restore_command", PGC_SIGHUP, WAL_ARCHIVE_RECOVERY,
            gettext_noop("Sets the shell command that will be called to retrieve an archived WAL file."),
            NULL
        },
index 9cb571f7cc73992c4531e5c8c9a39905f13b78db..9c9091e601ed6e678446dd73403ebb609ded5d2f 100644 (file)
                # placeholders: %p = path of file to restore
                #               %f = file name only
                # e.g. 'cp /mnt/server/archivedir/%f %p'
-               # (change requires restart)
 #archive_cleanup_command = ''  # command to execute at every restartpoint
 #recovery_end_command = '' # command to execute at completion of recovery