Skip to content

Commit 0d5c387

Browse files
committed
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
1 parent a82a5ee commit 0d5c387

File tree

3 files changed

+47
-4
lines changed

3 files changed

+47
-4
lines changed

doc/src/sgml/ref/pg_rewind.sgml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,21 @@ PostgreSQL documentation
241241
</listitem>
242242
</varlistentry>
243243

244+
<varlistentry>
245+
<term><option>--config-file=<replaceable class="parameter">filename</replaceable></option></term>
246+
<listitem>
247+
<para>
248+
Use the specified main server configuration file for the target
249+
cluster. This affects <application>pg_rewind</application> when
250+
it uses internally the <application>postgres</application> command
251+
for the rewind operation on this cluster (when retrieving
252+
<varname>restore_command</varname> with the option
253+
<option>-c/--restore-target-wal</option> and when forcing a
254+
completion of crash recovery).
255+
</para>
256+
</listitem>
257+
</varlistentry>
258+
244259
<varlistentry>
245260
<term><option>--debug</option></term>
246261
<listitem>

src/bin/pg_rewind/pg_rewind.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ char *datadir_target = NULL;
6161
char *datadir_source = NULL;
6262
char *connstr_source = NULL;
6363
char *restore_command = NULL;
64+
char *config_file = NULL;
6465

6566
static bool debug = false;
6667
bool showprogress = false;
@@ -87,6 +88,8 @@ usage(const char *progname)
8788
printf(_("Options:\n"));
8889
printf(_(" -c, --restore-target-wal use restore_command in target configuration to\n"
8990
" retrieve WAL files from archives\n"));
91+
printf(_(" --config-file=FILENAME use specified main server configuration\n"));
92+
printf(_(" file when running target cluster\n"));
9093
printf(_(" -D, --target-pgdata=DIRECTORY existing data directory to modify\n"));
9194
printf(_(" --source-pgdata=DIRECTORY source data directory to synchronize with\n"));
9295
printf(_(" --source-server=CONNSTR source server to synchronize with\n"));
@@ -115,6 +118,7 @@ main(int argc, char **argv)
115118
{"source-pgdata", required_argument, NULL, 1},
116119
{"source-server", required_argument, NULL, 2},
117120
{"no-ensure-shutdown", no_argument, NULL, 4},
121+
{"config-file", required_argument, NULL, 5},
118122
{"version", no_argument, NULL, 'V'},
119123
{"restore-target-wal", no_argument, NULL, 'c'},
120124
{"dry-run", no_argument, NULL, 'n'},
@@ -205,6 +209,10 @@ main(int argc, char **argv)
205209
case 4:
206210
no_ensure_shutdown = true;
207211
break;
212+
213+
case 5:
214+
config_file = pg_strdup(optarg);
215+
break;
208216
}
209217
}
210218

@@ -1058,6 +1066,13 @@ getRestoreCommand(const char *argv0)
10581066
appendPQExpBufferStr(postgres_cmd, " -D ");
10591067
appendShellString(postgres_cmd, datadir_target);
10601068

1069+
/* add custom configuration file only if requested */
1070+
if (config_file != NULL)
1071+
{
1072+
appendPQExpBufferStr(postgres_cmd, " -c config_file=");
1073+
appendShellString(postgres_cmd, config_file);
1074+
}
1075+
10611076
/* add -C switch, for restore_command */
10621077
appendPQExpBufferStr(postgres_cmd, " -C restore_command");
10631078

@@ -1136,6 +1151,13 @@ ensureCleanShutdown(const char *argv0)
11361151
appendPQExpBufferStr(postgres_cmd, " --single -F -D ");
11371152
appendShellString(postgres_cmd, datadir_target);
11381153

1154+
/* add custom configuration file only if requested */
1155+
if (config_file != NULL)
1156+
{
1157+
appendPQExpBufferStr(postgres_cmd, " -c config_file=");
1158+
appendShellString(postgres_cmd, config_file);
1159+
}
1160+
11391161
/* finish with the database name, and a properly quoted redirection */
11401162
appendPQExpBufferStr(postgres_cmd, " template1 < ");
11411163
appendShellString(postgres_cmd, DEVNULL);

src/bin/pg_rewind/t/RewindTest.pm

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,9 @@ sub run_pg_rewind
263263
"--debug",
264264
"--source-pgdata=$standby_pgdata",
265265
"--target-pgdata=$primary_pgdata",
266-
"--no-sync"
266+
"--no-sync",
267+
"--config-file",
268+
"$tmp_folder/primary-postgresql.conf.tmp"
267269
],
268270
'pg_rewind local');
269271
}
@@ -276,7 +278,8 @@ sub run_pg_rewind
276278
'pg_rewind', "--debug",
277279
"--source-server", $standby_connstr,
278280
"--target-pgdata=$primary_pgdata", "--no-sync",
279-
"--write-recovery-conf"
281+
"--write-recovery-conf", "--config-file",
282+
"$tmp_folder/primary-postgresql.conf.tmp"
280283
],
281284
'pg_rewind remote');
282285

@@ -323,7 +326,8 @@ sub run_pg_rewind
323326

324327
# Note the use of --no-ensure-shutdown here. WAL files are
325328
# gone in this mode and the primary has been stopped
326-
# gracefully already.
329+
# gracefully already. --config-file reuses the original
330+
# postgresql.conf as restore_command has been enabled above.
327331
command_ok(
328332
[
329333
'pg_rewind',
@@ -332,7 +336,9 @@ sub run_pg_rewind
332336
"--target-pgdata=$primary_pgdata",
333337
"--no-sync",
334338
"--no-ensure-shutdown",
335-
"--restore-target-wal"
339+
"--restore-target-wal",
340+
"--config-file",
341+
"$primary_pgdata/postgresql.conf"
336342
],
337343
'pg_rewind archive');
338344
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy