mirror of
https://github.com/postgres/postgres.git
synced 2025-04-29 13:56:47 +03:00
Add option --config-file to pg_rewind
This option is useful to do a rewind with the server configuration file (aka postgresql.conf) located outside the data directory, which is something that some Linux distributions and some HA tools like to rely on. As a result, this can simplify the logic around a rewind by avoiding the copy of such files before running pg_rewind. This option affects pg_rewind when it internally starts the target cluster with some "postgres" commands, adding -c config_file=FILE to the command strings generated, when: - retrieving a restore_command using a "postgres -C" command for -c/--restore-target-wal. - forcing crash recovery once to get the cluster into a clean shutdown state. Author: Gunnar "Nick" Bluth Reviewed-by: Michael Banck, Alexander Kukushkin, Michael Paquier, Alexander Alekseev Discussion: https://postgr.es/m/7c59265d-ac50-b0aa-ca1e-65e8bd27642a@pro-open.de
This commit is contained in:
parent
a82a5eee31
commit
0d5c387573
@ -241,6 +241,21 @@ PostgreSQL documentation
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--config-file=<replaceable class="parameter">filename</replaceable></option></term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Use the specified main server configuration file for the target
|
||||||
|
cluster. This affects <application>pg_rewind</application> when
|
||||||
|
it uses internally the <application>postgres</application> command
|
||||||
|
for the rewind operation on this cluster (when retrieving
|
||||||
|
<varname>restore_command</varname> with the option
|
||||||
|
<option>-c/--restore-target-wal</option> and when forcing a
|
||||||
|
completion of crash recovery).
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><option>--debug</option></term>
|
<term><option>--debug</option></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
@ -61,6 +61,7 @@ char *datadir_target = NULL;
|
|||||||
char *datadir_source = NULL;
|
char *datadir_source = NULL;
|
||||||
char *connstr_source = NULL;
|
char *connstr_source = NULL;
|
||||||
char *restore_command = NULL;
|
char *restore_command = NULL;
|
||||||
|
char *config_file = NULL;
|
||||||
|
|
||||||
static bool debug = false;
|
static bool debug = false;
|
||||||
bool showprogress = false;
|
bool showprogress = false;
|
||||||
@ -87,6 +88,8 @@ usage(const char *progname)
|
|||||||
printf(_("Options:\n"));
|
printf(_("Options:\n"));
|
||||||
printf(_(" -c, --restore-target-wal use restore_command in target configuration to\n"
|
printf(_(" -c, --restore-target-wal use restore_command in target configuration to\n"
|
||||||
" retrieve WAL files from archives\n"));
|
" retrieve WAL files from archives\n"));
|
||||||
|
printf(_(" --config-file=FILENAME use specified main server configuration\n"));
|
||||||
|
printf(_(" file when running target cluster\n"));
|
||||||
printf(_(" -D, --target-pgdata=DIRECTORY existing data directory to modify\n"));
|
printf(_(" -D, --target-pgdata=DIRECTORY existing data directory to modify\n"));
|
||||||
printf(_(" --source-pgdata=DIRECTORY source data directory to synchronize with\n"));
|
printf(_(" --source-pgdata=DIRECTORY source data directory to synchronize with\n"));
|
||||||
printf(_(" --source-server=CONNSTR source server to synchronize with\n"));
|
printf(_(" --source-server=CONNSTR source server to synchronize with\n"));
|
||||||
@ -115,6 +118,7 @@ main(int argc, char **argv)
|
|||||||
{"source-pgdata", required_argument, NULL, 1},
|
{"source-pgdata", required_argument, NULL, 1},
|
||||||
{"source-server", required_argument, NULL, 2},
|
{"source-server", required_argument, NULL, 2},
|
||||||
{"no-ensure-shutdown", no_argument, NULL, 4},
|
{"no-ensure-shutdown", no_argument, NULL, 4},
|
||||||
|
{"config-file", required_argument, NULL, 5},
|
||||||
{"version", no_argument, NULL, 'V'},
|
{"version", no_argument, NULL, 'V'},
|
||||||
{"restore-target-wal", no_argument, NULL, 'c'},
|
{"restore-target-wal", no_argument, NULL, 'c'},
|
||||||
{"dry-run", no_argument, NULL, 'n'},
|
{"dry-run", no_argument, NULL, 'n'},
|
||||||
@ -205,6 +209,10 @@ main(int argc, char **argv)
|
|||||||
case 4:
|
case 4:
|
||||||
no_ensure_shutdown = true;
|
no_ensure_shutdown = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 5:
|
||||||
|
config_file = pg_strdup(optarg);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1058,6 +1066,13 @@ getRestoreCommand(const char *argv0)
|
|||||||
appendPQExpBufferStr(postgres_cmd, " -D ");
|
appendPQExpBufferStr(postgres_cmd, " -D ");
|
||||||
appendShellString(postgres_cmd, datadir_target);
|
appendShellString(postgres_cmd, datadir_target);
|
||||||
|
|
||||||
|
/* add custom configuration file only if requested */
|
||||||
|
if (config_file != NULL)
|
||||||
|
{
|
||||||
|
appendPQExpBufferStr(postgres_cmd, " -c config_file=");
|
||||||
|
appendShellString(postgres_cmd, config_file);
|
||||||
|
}
|
||||||
|
|
||||||
/* add -C switch, for restore_command */
|
/* add -C switch, for restore_command */
|
||||||
appendPQExpBufferStr(postgres_cmd, " -C restore_command");
|
appendPQExpBufferStr(postgres_cmd, " -C restore_command");
|
||||||
|
|
||||||
@ -1136,6 +1151,13 @@ ensureCleanShutdown(const char *argv0)
|
|||||||
appendPQExpBufferStr(postgres_cmd, " --single -F -D ");
|
appendPQExpBufferStr(postgres_cmd, " --single -F -D ");
|
||||||
appendShellString(postgres_cmd, datadir_target);
|
appendShellString(postgres_cmd, datadir_target);
|
||||||
|
|
||||||
|
/* add custom configuration file only if requested */
|
||||||
|
if (config_file != NULL)
|
||||||
|
{
|
||||||
|
appendPQExpBufferStr(postgres_cmd, " -c config_file=");
|
||||||
|
appendShellString(postgres_cmd, config_file);
|
||||||
|
}
|
||||||
|
|
||||||
/* finish with the database name, and a properly quoted redirection */
|
/* finish with the database name, and a properly quoted redirection */
|
||||||
appendPQExpBufferStr(postgres_cmd, " template1 < ");
|
appendPQExpBufferStr(postgres_cmd, " template1 < ");
|
||||||
appendShellString(postgres_cmd, DEVNULL);
|
appendShellString(postgres_cmd, DEVNULL);
|
||||||
|
@ -263,7 +263,9 @@ sub run_pg_rewind
|
|||||||
"--debug",
|
"--debug",
|
||||||
"--source-pgdata=$standby_pgdata",
|
"--source-pgdata=$standby_pgdata",
|
||||||
"--target-pgdata=$primary_pgdata",
|
"--target-pgdata=$primary_pgdata",
|
||||||
"--no-sync"
|
"--no-sync",
|
||||||
|
"--config-file",
|
||||||
|
"$tmp_folder/primary-postgresql.conf.tmp"
|
||||||
],
|
],
|
||||||
'pg_rewind local');
|
'pg_rewind local');
|
||||||
}
|
}
|
||||||
@ -276,7 +278,8 @@ sub run_pg_rewind
|
|||||||
'pg_rewind', "--debug",
|
'pg_rewind', "--debug",
|
||||||
"--source-server", $standby_connstr,
|
"--source-server", $standby_connstr,
|
||||||
"--target-pgdata=$primary_pgdata", "--no-sync",
|
"--target-pgdata=$primary_pgdata", "--no-sync",
|
||||||
"--write-recovery-conf"
|
"--write-recovery-conf", "--config-file",
|
||||||
|
"$tmp_folder/primary-postgresql.conf.tmp"
|
||||||
],
|
],
|
||||||
'pg_rewind remote');
|
'pg_rewind remote');
|
||||||
|
|
||||||
@ -323,7 +326,8 @@ sub run_pg_rewind
|
|||||||
|
|
||||||
# Note the use of --no-ensure-shutdown here. WAL files are
|
# Note the use of --no-ensure-shutdown here. WAL files are
|
||||||
# gone in this mode and the primary has been stopped
|
# gone in this mode and the primary has been stopped
|
||||||
# gracefully already.
|
# gracefully already. --config-file reuses the original
|
||||||
|
# postgresql.conf as restore_command has been enabled above.
|
||||||
command_ok(
|
command_ok(
|
||||||
[
|
[
|
||||||
'pg_rewind',
|
'pg_rewind',
|
||||||
@ -332,7 +336,9 @@ sub run_pg_rewind
|
|||||||
"--target-pgdata=$primary_pgdata",
|
"--target-pgdata=$primary_pgdata",
|
||||||
"--no-sync",
|
"--no-sync",
|
||||||
"--no-ensure-shutdown",
|
"--no-ensure-shutdown",
|
||||||
"--restore-target-wal"
|
"--restore-target-wal",
|
||||||
|
"--config-file",
|
||||||
|
"$primary_pgdata/postgresql.conf"
|
||||||
],
|
],
|
||||||
'pg_rewind archive');
|
'pg_rewind archive');
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user