From f7d761f6774753d4914d0dbc80effbb1ab09b58e Mon Sep 17 00:00:00 2001 From: Matthias van de Meent Date: Mon, 8 Feb 2021 17:36:00 +0100 Subject: [PATCH v5 3/6] Add a command column to the copy progress view This allows filtering on COPY FROM / COPY TO for progress reporting, and makes it possible to determine the further meaning of the columns involved. --- doc/src/sgml/monitoring.sgml | 10 ++++++++++ src/backend/catalog/system_views.sql | 3 +++ src/backend/commands/copyfrom.c | 1 + src/backend/commands/copyto.c | 1 + src/include/commands/progress.h | 5 +++++ src/test/regress/expected/rules.out | 5 +++++ 6 files changed, 25 insertions(+) diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index 940e9dcee4..ca84b53896 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -6544,6 +6544,16 @@ SELECT pg_stat_get_backend_pid(s.backendid) AS pid, + + + command text + + + The command that is running: COPY FROM, or + COPY TO. + + + bytes_processed bigint diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index e7e227792c..1082b7d253 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -1129,6 +1129,9 @@ CREATE VIEW pg_stat_progress_copy AS SELECT S.pid AS pid, S.datid AS datid, D.datname AS datname, S.relid AS relid, + CASE S.param5 WHEN 1 THEN 'COPY FROM' + WHEN 2 THEN 'COPY TO' + END AS command, S.param1 AS bytes_processed, S.param2 AS bytes_total, S.param3 AS tuples_processed, diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c index fb3c7e2c0c..ce343dbf80 100644 --- a/src/backend/commands/copyfrom.c +++ b/src/backend/commands/copyfrom.c @@ -1428,6 +1428,7 @@ BeginCopyFrom(ParseState *pstate, /* initialize progress */ pgstat_progress_start_command(PROGRESS_COMMAND_COPY, cstate->rel ? RelationGetRelid(cstate->rel) : InvalidOid); + pgstat_progress_update_param(PROGRESS_COPY_COMMAND, PROGRESS_COPY_COMMAND_FROM); cstate->bytes_processed = 0; /* We keep those variables in cstate. */ diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c index 9ffe7a6ee3..534c091c75 100644 --- a/src/backend/commands/copyto.c +++ b/src/backend/commands/copyto.c @@ -772,6 +772,7 @@ BeginCopyTo(ParseState *pstate, /* initialize progress */ pgstat_progress_start_command(PROGRESS_COMMAND_COPY, cstate->rel ? RelationGetRelid(cstate->rel) : InvalidOid); + pgstat_progress_update_param(PROGRESS_COPY_COMMAND, PROGRESS_COPY_COMMAND_TO); cstate->bytes_processed = 0; MemoryContextSwitchTo(oldcontext); diff --git a/src/include/commands/progress.h b/src/include/commands/progress.h index 8b2b188bd5..1c30d09abb 100644 --- a/src/include/commands/progress.h +++ b/src/include/commands/progress.h @@ -138,5 +138,10 @@ #define PROGRESS_COPY_BYTES_TOTAL 1 #define PROGRESS_COPY_TUPLES_PROCESSED 2 #define PROGRESS_COPY_TUPLES_EXCLUDED 3 +#define PROGRESS_COPY_COMMAND 4 + +/* Commands of PROGRESS_COPY_COMMAND */ +#define PROGRESS_COPY_COMMAND_FROM 1 +#define PROGRESS_COPY_COMMAND_TO 2 #endif diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index 970f6909c2..63b5e33083 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -1948,6 +1948,11 @@ pg_stat_progress_copy| SELECT s.pid, s.datid, d.datname, s.relid, + CASE s.param5 + WHEN 1 THEN 'COPY FROM'::text + WHEN 2 THEN 'COPY TO'::text + ELSE NULL::text + END AS command, s.param1 AS bytes_processed, s.param2 AS bytes_total, s.param3 AS tuples_processed, -- 2.20.1