diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index 3f83d87e50..8ebf24e771 100644 --- a/src/bin/pg_basebackup/pg_basebackup.c +++ b/src/bin/pg_basebackup/pg_basebackup.c @@ -61,6 +61,16 @@ typedef struct TablespaceList */ #define MINIMUM_VERSION_FOR_PG_WAL 100000 +/* + * Different ways to include WAL + */ +typedef enum +{ + NO_WAL, + FETCH_WAL, + STREAM_WAL +} IncludeWal; + /* Global options */ static char *basedir = NULL; static TablespaceList tablespace_dirs = {NULL, NULL}; @@ -71,8 +81,7 @@ static bool noclean = false; static bool showprogress = false; static int verbose = 0; static int compresslevel = 0; -static bool includewal = true; -static bool streamwal = true; +static IncludeWal includewal = STREAM_WAL; static bool fastcheckpoint = false; static bool writerecoveryconf = false; static bool do_sync = true; @@ -1697,7 +1706,7 @@ BaseBackup(void) * If WAL streaming was requested, also check that the server is new * enough for that. */ - if (streamwal && !CheckServerVersionForStreaming(conn)) + if (includewal == STREAM_WAL && !CheckServerVersionForStreaming(conn)) { /* * Error message already written in CheckServerVersionForStreaming(), @@ -1731,9 +1740,9 @@ BaseBackup(void) psprintf("BASE_BACKUP LABEL '%s' %s %s %s %s %s %s", escaped_label, showprogress ? "PROGRESS" : "", - includewal && !streamwal ? "WAL" : "", + includewal == FETCH_WAL ? "WAL" : "", fastcheckpoint ? "FAST" : "", - includewal ? "NOWAIT" : "", + includewal == NO_WAL ? "" : "NOWAIT", maxrate_clause ? maxrate_clause : "", format == 't' ? "TABLESPACE_MAP" : ""); @@ -1776,7 +1785,7 @@ BaseBackup(void) PQclear(res); MemSet(xlogend, 0, sizeof(xlogend)); - if (verbose && includewal) + if (verbose && includewal != NO_WAL) fprintf(stderr, _("transaction log start point: %s on timeline %u\n"), xlogstart, starttli); @@ -1833,7 +1842,7 @@ BaseBackup(void) * If we're streaming WAL, start the streaming session before we start * receiving the actual data chunks. */ - if (streamwal) + if (includewal == STREAM_WAL) { if (verbose) fprintf(stderr, _("%s: starting background WAL receiver\n"), @@ -1879,7 +1888,7 @@ BaseBackup(void) disconnect_and_exit(1); } strlcpy(xlogend, PQgetvalue(res, 0, 0), sizeof(xlogend)); - if (verbose && includewal) + if (verbose && includewal != NO_WAL) fprintf(stderr, "transaction log end point: %s\n", xlogend); PQclear(res); @@ -2117,20 +2126,17 @@ main(int argc, char **argv) if (strcmp(optarg, "n") == 0 || strcmp(optarg, "none") == 0) { - includewal = false; - streamwal = false; + includewal = NO_WAL; } else if (strcmp(optarg, "f") == 0 || strcmp(optarg, "fetch") == 0) { - includewal = true; - streamwal = false; + includewal = FETCH_WAL; } else if (strcmp(optarg, "s") == 0 || strcmp(optarg, "stream") == 0) { - includewal = true; - streamwal = true; + includewal = STREAM_WAL; } else { @@ -2261,7 +2267,7 @@ main(int argc, char **argv) exit(1); } - if (format == 't' && streamwal && strcmp(basedir, "-") == 0) + if (format == 't' && includewal == STREAM_WAL && strcmp(basedir, "-") == 0) { fprintf(stderr, _("%s: cannot stream transaction logs in tar mode to stdout\n"), @@ -2271,7 +2277,7 @@ main(int argc, char **argv) exit(1); } - if (replication_slot && !streamwal) + if (replication_slot && includewal != STREAM_WAL) { fprintf(stderr, _("%s: replication slots can only be used with WAL streaming\n"),