diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index 987580d6df..2c9f51daf4 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -4388,10 +4388,7 @@ SELECT pg_stat_get_backend_pid(s.backendid) AS pid, backup_total bigint - Total amount of data that will be streamed. If progress reporting - is not enabled in pg_basebackup - (i.e., --progress option is not specified), - this is 0. Otherwise, this is estimated and + Total amount of data that will be streamed. This is estimated and reported as of the beginning of streaming database files phase. Note that this is only an approximation since the database @@ -4399,7 +4396,10 @@ SELECT pg_stat_get_backend_pid(s.backendid) AS pid, and WAL log may be included in the backup later. This is always the same value as backup_streamed once the amount of data streamed exceeds the estimated - total size. + total size. If the estimation is disabled in + pg_basebackup + (i.e., --no-estimate-size option is specified), + this is 0. diff --git a/doc/src/sgml/ref/pg_basebackup.sgml b/doc/src/sgml/ref/pg_basebackup.sgml index 29bf2f9b97..90638aad0e 100644 --- a/doc/src/sgml/ref/pg_basebackup.sgml +++ b/doc/src/sgml/ref/pg_basebackup.sgml @@ -460,21 +460,6 @@ PostgreSQL documentation in this case the estimated target size will increase once it passes the total estimate without WAL. - - When this is enabled, the backup will start by enumerating the size of - the entire database, and then go back and send the actual contents. - This may make the backup take slightly longer, and in particular it - will take longer before the first data is sent. - - - Whether this is enabled or not, the - pg_stat_progress_basebackup view - report the progress of the backup in the server side. But note - that the total amount of data that will be streamed is estimated - and reported only when this option is enabled. In other words, - backup_total column in the view always - indicates 0 if this option is disabled. - @@ -552,6 +537,30 @@ PostgreSQL documentation + + + + + + This option prevents the server from estimating the total + amount of backup data that will be streamed, resulting in the + backup_total column in the + pg_stat_progress_basebackup + to be 0. + + + Without this option, the backup will start by enumerating + the size of the entire database, and then go back and send + the actual contents. This may make the backup take slightly + longer, and in particular it will take longer before the first + data is sent. This option is useful to avoid such estimation + time if it's too long. + + + This option is not allowed when using . + + + diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index 48bd838803..c5d95958b2 100644 --- a/src/bin/pg_basebackup/pg_basebackup.c +++ b/src/bin/pg_basebackup/pg_basebackup.c @@ -121,6 +121,7 @@ static char *label = "pg_basebackup base backup"; static bool noclean = false; static bool checksum_failure = false; static bool showprogress = false; +static bool estimatesize = true; static int verbose = 0; static int compresslevel = 0; static IncludeWal includewal = STREAM_WAL; @@ -386,6 +387,7 @@ usage(void) printf(_(" --no-slot prevent creation of temporary replication slot\n")); printf(_(" --no-verify-checksums\n" " do not verify checksums\n")); + printf(_(" --no-estimate-size do not estimate backup size in server side\n")); printf(_(" -?, --help show this help, then exit\n")); printf(_("\nConnection options:\n")); printf(_(" -d, --dbname=CONNSTR connection string\n")); @@ -1741,7 +1743,7 @@ BaseBackup(void) basebkp = psprintf("BASE_BACKUP LABEL '%s' %s %s %s %s %s %s %s", escaped_label, - showprogress ? "PROGRESS" : "", + estimatesize ? "PROGRESS" : "", includewal == FETCH_WAL ? "WAL" : "", fastcheckpoint ? "FAST" : "", includewal == NO_WAL ? "" : "NOWAIT", @@ -2066,6 +2068,7 @@ main(int argc, char **argv) {"waldir", required_argument, NULL, 1}, {"no-slot", no_argument, NULL, 2}, {"no-verify-checksums", no_argument, NULL, 3}, + {"no-estimate-size", no_argument, NULL, 4}, {NULL, 0, NULL, 0} }; int c; @@ -2234,6 +2237,9 @@ main(int argc, char **argv) case 3: verify_checksums = false; break; + case 4: + estimatesize = false; + break; default: /* @@ -2356,6 +2362,14 @@ main(int argc, char **argv) } #endif + if (showprogress && !estimatesize) + { + pg_log_error("--progress and --no-estimate-size are incompatible options"); + fprintf(stderr, _("Try \"%s --help\" for more information.\n"), + progname); + exit(1); + } + /* connection in replication mode to server */ conn = GetConnection(); if (!conn)