From af43581e8b297b2527e0b1716b616b7ea1fc496f Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Wed, 8 Jan 2020 14:33:49 -0300 Subject: [PATCH] Reimplement nullification of walsender timestamp Make the value null only at pg_stat_activity-output time, as suggested by Tom Lane, instead of messing with the internal state. This should appease buildfarm members with force_parallel_mode=regress, which are running parallel queries on logical replication walsenders. The fact that walsenders can run parallel queries should perhaps be studied more carefully, but for the moment let's get rid of the red blots in buildfarm. Backpatch to pg10, like the previous commit. Discussion: https://postgr.es/m/30804.1578438763@sss.pgh.pa.us --- src/backend/access/transam/xact.c | 7 ------- src/backend/utils/adt/pgstatfuncs.c | 8 +++++++- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index 7b4d4b75f1b..7c1771eae76 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -750,13 +750,6 @@ GetCurrentTransactionStopTimestamp(void) void SetCurrentStatementStartTimestamp(void) { - /* - * Skip if on a walsender; this is not needed, and it confuses monitoring - * if we publish non-NULL values. - */ - if (am_walsender) - return; - if (!IsParallelWorker()) stmtStartTimestamp = GetCurrentTimestamp(); else diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index e95e3471846..02ab6433f94 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -736,7 +736,13 @@ pg_stat_get_activity(PG_FUNCTION_ARGS) else nulls[7] = true; - if (beentry->st_xact_start_timestamp != 0) + /* + * Don't expose transaction time for walsenders; it confuses + * monitoring, particularly because we don't keep the time up-to- + * date. + */ + if (beentry->st_xact_start_timestamp != 0 && + beentry->st_backendType != B_WAL_SENDER) values[8] = TimestampTzGetDatum(beentry->st_xact_start_timestamp); else nulls[8] = true;