Commit 67e0adfb authored by Fujii Masao's avatar Fujii Masao

Report NULL as total backup size if it's not estimated.

Previously 0 was reported in pg_stat_progress_basebackup.total_backup
if the total backup size was not estimated. Per discussion, our consensus
is that NULL is better choise as the value in total_backup in that case.
So this commit makes pg_stat_progress_basebackup view report NULL
in total_backup column if the estimation is disabled.

Bump catversion.

Author: Fujii Masao
Reviewed-by: Amit Langote, Magnus Hagander, Alvaro Herrera
Discussion: https://postgr.es/m/CABUevExnhOD89zBDuPvfAAh243RzNpwCPEWNLtMYpKHMB8gbAQ@mail.gmail.com
parent 64fe6022
...@@ -4403,7 +4403,7 @@ SELECT pg_stat_get_backend_pid(s.backendid) AS pid, ...@@ -4403,7 +4403,7 @@ SELECT pg_stat_get_backend_pid(s.backendid) AS pid,
total size. If the estimation is disabled in total size. If the estimation is disabled in
<application>pg_basebackup</application> <application>pg_basebackup</application>
(i.e., <literal>--no-estimate-size</literal> option is specified), (i.e., <literal>--no-estimate-size</literal> option is specified),
this is <literal>0</literal>. this is <literal>NULL</literal>.
</entry> </entry>
</row> </row>
<row> <row>
......
...@@ -546,7 +546,7 @@ PostgreSQL documentation ...@@ -546,7 +546,7 @@ PostgreSQL documentation
amount of backup data that will be streamed, resulting in the amount of backup data that will be streamed, resulting in the
<literal>backup_total</literal> column in the <literal>backup_total</literal> column in the
<structname>pg_stat_progress_basebackup</structname> <structname>pg_stat_progress_basebackup</structname>
to be <literal>0</literal>. to be <literal>NULL</literal>.
</para> </para>
<para> <para>
Without this option, the backup will start by enumerating Without this option, the backup will start by enumerating
......
...@@ -1070,7 +1070,7 @@ CREATE VIEW pg_stat_progress_basebackup AS ...@@ -1070,7 +1070,7 @@ CREATE VIEW pg_stat_progress_basebackup AS
WHEN 4 THEN 'waiting for wal archiving to finish' WHEN 4 THEN 'waiting for wal archiving to finish'
WHEN 5 THEN 'transferring wal files' WHEN 5 THEN 'transferring wal files'
END AS phase, END AS phase,
S.param2 AS backup_total, CASE S.param2 WHEN -1 THEN NULL ELSE S.param2 END AS backup_total,
S.param3 AS backup_streamed, S.param3 AS backup_streamed,
S.param4 AS tablespaces_total, S.param4 AS tablespaces_total,
S.param5 AS tablespaces_streamed S.param5 AS tablespaces_streamed
......
...@@ -123,7 +123,10 @@ static long long int total_checksum_failures; ...@@ -123,7 +123,10 @@ static long long int total_checksum_failures;
/* Do not verify checksums. */ /* Do not verify checksums. */
static bool noverify_checksums = false; static bool noverify_checksums = false;
/* Total amount of backup data that will be streamed */ /*
* Total amount of backup data that will be streamed.
* -1 means that the size is not estimated.
*/
static int64 backup_total = 0; static int64 backup_total = 0;
/* Amount of backup data already streamed */ /* Amount of backup data already streamed */
...@@ -258,6 +261,18 @@ perform_base_backup(basebackup_options *opt) ...@@ -258,6 +261,18 @@ perform_base_backup(basebackup_options *opt)
backup_streamed = 0; backup_streamed = 0;
pgstat_progress_start_command(PROGRESS_COMMAND_BASEBACKUP, InvalidOid); pgstat_progress_start_command(PROGRESS_COMMAND_BASEBACKUP, InvalidOid);
/*
* If the estimation of the total backup size is disabled, make the
* backup_total column in the view return NULL by setting the parameter to
* -1.
*/
if (!opt->progress)
{
backup_total = -1;
pgstat_progress_update_param(PROGRESS_BASEBACKUP_BACKUP_TOTAL,
backup_total);
}
datadirpathlen = strlen(DataDir); datadirpathlen = strlen(DataDir);
backup_started_in_recovery = RecoveryInProgress(); backup_started_in_recovery = RecoveryInProgress();
...@@ -1842,7 +1857,7 @@ update_basebackup_progress(int64 delta) ...@@ -1842,7 +1857,7 @@ update_basebackup_progress(int64 delta)
* will always be wrong if WAL is included), but that's better than having * will always be wrong if WAL is included), but that's better than having
* the done column be bigger than the total. * the done column be bigger than the total.
*/ */
if (backup_total > 0 && backup_streamed > backup_total) if (backup_total > -1 && backup_streamed > backup_total)
{ {
backup_total = backup_streamed; backup_total = backup_streamed;
val[nparam++] = backup_total; val[nparam++] = backup_total;
......
...@@ -53,6 +53,6 @@ ...@@ -53,6 +53,6 @@
*/ */
/* yyyymmddN */ /* yyyymmddN */
#define CATALOG_VERSION_NO 202003191 #define CATALOG_VERSION_NO 202003241
#endif #endif
...@@ -1886,7 +1886,10 @@ pg_stat_progress_basebackup| SELECT s.pid, ...@@ -1886,7 +1886,10 @@ pg_stat_progress_basebackup| SELECT s.pid,
WHEN 5 THEN 'transferring wal files'::text WHEN 5 THEN 'transferring wal files'::text
ELSE NULL::text ELSE NULL::text
END AS phase, END AS phase,
s.param2 AS backup_total, CASE s.param2
WHEN '-1'::integer THEN NULL::bigint
ELSE s.param2
END AS backup_total,
s.param3 AS backup_streamed, s.param3 AS backup_streamed,
s.param4 AS tablespaces_total, s.param4 AS tablespaces_total,
s.param5 AS tablespaces_streamed s.param5 AS tablespaces_streamed
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment