diff options
-rw-r--r-- | doc/src/sgml/monitoring.sgml | 10 | ||||
-rw-r--r-- | doc/src/sgml/ref/pg_basebackup.sgml | 39 | ||||
-rw-r--r-- | src/bin/pg_basebackup/pg_basebackup.c | 16 |
3 files changed, 44 insertions, 21 deletions
diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index 89853a16d82..5bffdcce10d 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -4392,10 +4392,7 @@ SELECT pg_stat_get_backend_pid(s.backendid) AS pid, <entry><structfield>backup_total</structfield></entry> <entry><type>bigint</type></entry> <entry> - Total amount of data that will be streamed. If progress reporting - is not enabled in <application>pg_basebackup</application> - (i.e., <literal>--progress</literal> option is not specified), - this is <literal>0</literal>. Otherwise, this is estimated and + Total amount of data that will be streamed. This is estimated and reported as of the beginning of <literal>streaming database files</literal> phase. Note that this is only an approximation since the database @@ -4403,7 +4400,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 <structfield>backup_streamed</structfield> once the amount of data streamed exceeds the estimated - total size. + total size. If the estimation is disabled in + <application>pg_basebackup</application> + (i.e., <literal>--no-estimate-size</literal> option is specified), + this is <literal>0</literal>. </entry> </row> <row> diff --git a/doc/src/sgml/ref/pg_basebackup.sgml b/doc/src/sgml/ref/pg_basebackup.sgml index 29bf2f9b979..90638aad0e2 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. </para> - <para> - 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. - </para> - <para> - Whether this is enabled or not, the - <structname>pg_stat_progress_basebackup</structname> 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, - <literal>backup_total</literal> column in the view always - indicates <literal>0</literal> if this option is disabled. - </para> </listitem> </varlistentry> @@ -552,6 +537,30 @@ PostgreSQL documentation </para> </listitem> </varlistentry> + + <varlistentry> + <term><option>--no-estimate-size</option></term> + <listitem> + <para> + This option prevents the server from estimating the total + amount of backup data that will be streamed, resulting in the + <literal>backup_total</literal> column in the + <structname>pg_stat_progress_basebackup</structname> + to be <literal>0</literal>. + </para> + <para> + 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. + </para> + <para> + This option is not allowed when using <option>--progress</option>. + </para> + </listitem> + </varlistentry> </variablelist> </para> diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index 48bd838803b..c5d95958b29 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) |