aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2020-01-08 14:33:49 -0300
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2020-01-08 14:33:49 -0300
commit20c4df8c8d7c54e34e921e770b594582d276f19e (patch)
tree7a1db96fad68281d6bc3f34a589f3bbd38b77573
parentc24f3b70efc243bb44a6a4121032f19e2d6e813e (diff)
downloadpostgresql-20c4df8c8d7c54e34e921e770b594582d276f19e.tar.gz
postgresql-20c4df8c8d7c54e34e921e770b594582d276f19e.zip
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
-rw-r--r--src/backend/access/transam/xact.c7
-rw-r--r--src/backend/utils/adt/pgstatfuncs.c8
2 files changed, 7 insertions, 8 deletions
diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c
index 075b2431833..bd396f0f08f 100644
--- a/src/backend/access/transam/xact.c
+++ b/src/backend/access/transam/xact.c
@@ -817,13 +817,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 05240bfd142..93b7814418d 100644
--- a/src/backend/utils/adt/pgstatfuncs.c
+++ b/src/backend/utils/adt/pgstatfuncs.c
@@ -726,7 +726,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;