]> granicus.if.org Git - postgresql/commitdiff
Return NULL for checksum failures if checksums are not enabled
authorMagnus Hagander <magnus@hagander.net>
Wed, 17 Apr 2019 11:51:48 +0000 (13:51 +0200)
committerMagnus Hagander <magnus@hagander.net>
Wed, 17 Apr 2019 11:51:48 +0000 (13:51 +0200)
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 <rjuju123@gmail.com>
Reviewed-by: Robert Treat <rob@xzilla.net>
doc/src/sgml/monitoring.sgml
src/backend/catalog/system_views.sql
src/backend/utils/adt/pgstatfuncs.c
src/test/regress/expected/rules.out

index 547fe4cce934a9acebe723898ca706d766ecdee8..a179d6111e4b305ef2dfb871c3975c23cabdfc1d 100644 (file)
@@ -2600,13 +2600,15 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i
      <entry><structfield>checksum_failures</structfield></entry>
      <entry><type>bigint</type></entry>
      <entry>Number of data page checksum failures detected in this
-     database</entry>
+      database (or on a shared object), or NULL if data checksums are not
+      enabled.</entry>
     </row>
     <row>
      <entry><structfield>checksum_last_failure</structfield></entry>
      <entry><type>timestamp with time zone</type></entry>
      <entry>Time at which the last data page checksum failure was detected in
-     this database, or on a shared object.</entry>
+      this database (or on a shared object), or NULL if data checksums are not
+      enabled.</entry>
     </row>
     <row>
      <entry><structfield>blk_read_time</structfield></entry>
index 161bad6c900f1877aa8f4742797e1607c93ba9df..566100d6df22b753e56e76fba5c2b243ca998916 100644 (file)
@@ -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,
index 97f41fb46c171c1019bfaa309c9f5600a7803810..05240bfd142c3b0176d254640e81dba4c6cb58bb 100644 (file)
@@ -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
index 30973904c55482d896b016143e6f3f1b60a9e485..0c392e51e21e1da8e1ba3f215d66b121448a8f8d 100644 (file)
@@ -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,