From 252b707bc41cc9bf6c55c18d8cb302a6176b7e48 Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Wed, 17 Apr 2019 13:51:48 +0200 Subject: [PATCH] Return NULL for checksum failures if checksums are not enabled Returning 0 could falsely indicate that there is no problem. NULL correctly indicates that there is no information about potential problems. Also return 0 as numbackends instead of NULL for shared objects (as no connection can be made to a shared object only). Author: Julien Rouhaud Reviewed-by: Robert Treat --- doc/src/sgml/monitoring.sgml | 6 ++++-- src/backend/catalog/system_views.sql | 2 +- src/backend/utils/adt/pgstatfuncs.c | 7 +++++++ src/test/regress/expected/rules.out | 2 +- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index 547fe4cce9..a179d6111e 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -2600,13 +2600,15 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i checksum_failures bigint Number of data page checksum failures detected in this - database + database (or on a shared object), or NULL if data checksums are not + enabled. checksum_last_failure timestamp with time zone Time at which the last data page checksum failure was detected in - this database, or on a shared object. + this database (or on a shared object), or NULL if data checksums are not + enabled. blk_read_time diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index 161bad6c90..566100d6df 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -817,7 +817,7 @@ CREATE VIEW pg_stat_database AS D.oid AS datid, D.datname AS datname, CASE - WHEN (D.oid = (0)::oid) THEN NULL::integer + WHEN (D.oid = (0)::oid) THEN 0 ELSE pg_stat_get_db_numbackends(D.oid) END AS numbackends, pg_stat_get_db_xact_commit(D.oid) AS xact_commit, diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index 97f41fb46c..05240bfd14 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -15,6 +15,7 @@ #include "postgres.h" #include "access/htup_details.h" +#include "access/xlog.h" #include "catalog/pg_authid.h" #include "catalog/pg_type.h" #include "common/ip.h" @@ -1526,6 +1527,9 @@ pg_stat_get_db_checksum_failures(PG_FUNCTION_ARGS) int64 result; PgStat_StatDBEntry *dbentry; + if (!DataChecksumsEnabled()) + PG_RETURN_NULL(); + if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL) result = 0; else @@ -1541,6 +1545,9 @@ pg_stat_get_db_checksum_last_failure(PG_FUNCTION_ARGS) TimestampTz result; PgStat_StatDBEntry *dbentry; + if (!DataChecksumsEnabled()) + PG_RETURN_NULL(); + if ((dbentry = pgstat_fetch_stat_dbentry(dbid)) == NULL) result = 0; else diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index 30973904c5..0c392e51e2 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -1806,7 +1806,7 @@ pg_stat_bgwriter| SELECT pg_stat_get_bgwriter_timed_checkpoints() AS checkpoints pg_stat_database| SELECT d.oid AS datid, d.datname, CASE - WHEN (d.oid = (0)::oid) THEN NULL::integer + WHEN (d.oid = (0)::oid) THEN 0 ELSE pg_stat_get_db_numbackends(d.oid) END AS numbackends, pg_stat_get_db_xact_commit(d.oid) AS xact_commit, -- 2.40.0