diff options
Diffstat (limited to 'src/bin/pg_basebackup/pg_basebackup.c')
-rw-r--r-- | src/bin/pg_basebackup/pg_basebackup.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index 536368020b0..80de8820ff7 100644 --- a/src/bin/pg_basebackup/pg_basebackup.c +++ b/src/bin/pg_basebackup/pg_basebackup.c @@ -239,6 +239,7 @@ usage(void) " (in kB/s, or use suffix \"k\" or \"M\")\n")); printf(_(" -R, --write-recovery-conf\n" " write recovery.conf after backup\n")); + printf(_(" -S, --slot=SLOTNAME replication slot to use\n")); printf(_(" -T, --tablespace-mapping=OLDDIR=NEWDIR\n" " relocate tablespace in OLDDIR to NEWDIR\n")); printf(_(" -x, --xlog include required WAL files in backup (fetch mode)\n")); @@ -1536,6 +1537,13 @@ GenerateRecoveryConf(PGconn *conn) appendPQExpBuffer(recoveryconfcontents, "primary_conninfo = '%s'\n", escaped); free(escaped); + if (replication_slot) + { + escaped = escape_quotes(replication_slot); + appendPQExpBuffer(recoveryconfcontents, "primary_slot_name = '%s'\n", replication_slot); + free(escaped); + } + if (PQExpBufferBroken(recoveryconfcontents) || PQExpBufferDataBroken(conninfo_buf)) { @@ -1934,6 +1942,7 @@ main(int argc, char **argv) {"checkpoint", required_argument, NULL, 'c'}, {"max-rate", required_argument, NULL, 'r'}, {"write-recovery-conf", no_argument, NULL, 'R'}, + {"slot", required_argument, NULL, 'S'}, {"tablespace-mapping", required_argument, NULL, 'T'}, {"xlog", no_argument, NULL, 'x'}, {"xlog-method", required_argument, NULL, 'X'}, @@ -1974,7 +1983,7 @@ main(int argc, char **argv) } } - while ((c = getopt_long(argc, argv, "D:F:r:RT:xX:l:zZ:d:c:h:p:U:s:wWvP", + while ((c = getopt_long(argc, argv, "D:F:r:RT:xX:l:zZ:d:c:h:p:U:s:S:wWvP", long_options, &option_index)) != -1) { switch (c) @@ -2001,6 +2010,9 @@ main(int argc, char **argv) case 'R': writerecoveryconf = true; break; + case 'S': + replication_slot = pg_strdup(optarg); + break; case 'T': tablespace_list_append(optarg); break; @@ -2165,6 +2177,16 @@ main(int argc, char **argv) exit(1); } + if (replication_slot && !streamwal) + { + fprintf(stderr, + _("%s: replication slots can only be used with WAL streaming\n"), + progname); + fprintf(stderr, _("Try \"%s --help\" for more information.\n"), + progname); + exit(1); + } + if (strcmp(xlog_dir, "") != 0) { if (format != 'p') |