From e0b18c8674a19133bd9133b8f5a523bdc9280589 Mon Sep 17 00:00:00 2001
From: shihao zhong <zhong950419@gmail.com>
Date: Wed, 11 Mar 2026 16:55:22 +0000
Subject: [PATCH] Add stats_reset column to pg_statio_all_sequences view

This commit adds the stats_reset column to pg_statio_all_sequences,
allowing users to see when the reset was last performed. This brings
consistency with pg_statio_all_tables and other statistics views.

Includes:
- system_views.sql: View definition update
- monitoring.sgml: Documentation update and indentation fix
- catversion.h: Mandatory catalog version bump
- Regression tests: Updated rules.out and stats.out, and added stats.sql test case
---
 doc/src/sgml/monitoring.sgml         | 9 +++++++++
 src/backend/catalog/system_views.sql | 3 ++-
 src/include/catalog/catversion.h     | 2 +-
 src/test/regress/expected/rules.out  | 9 ++++++---
 src/test/regress/expected/stats.out  | 8 ++++++++
 src/test/regress/sql/stats.sql       | 4 ++++
 6 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml
index 763f6731dee..22100d12955 100644
--- a/doc/src/sgml/monitoring.sgml
+++ b/doc/src/sgml/monitoring.sgml
@@ -4908,6 +4908,15 @@ description | Waiting for a newly initialized WAL file to reach durable storage
        Number of buffer hits in this sequence
       </para></entry>
      </row>
+
+     <row>
+      <entry role="catalog_table_entry"><para role="column_definition">
+       <structfield>stats_reset</structfield> <type>timestamp with time zone</type>
+      </para>
+      <para>
+       Time at which these statistics were last reset
+      </para></entry>
+     </row>
     </tbody>
    </tgroup>
   </table>
diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql
index 3361030d34c..0f1e61210cf 100644
--- a/src/backend/catalog/system_views.sql
+++ b/src/backend/catalog/system_views.sql
@@ -896,7 +896,8 @@ CREATE VIEW pg_statio_all_sequences AS
             C.relname AS relname,
             pg_stat_get_blocks_fetched(C.oid) -
                     pg_stat_get_blocks_hit(C.oid) AS blks_read,
-            pg_stat_get_blocks_hit(C.oid) AS blks_hit
+            pg_stat_get_blocks_hit(C.oid) AS blks_hit,
+            pg_stat_get_stat_reset_time(C.oid) AS stats_reset
     FROM pg_class C
             LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
     WHERE C.relkind = 'S';
diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h
index 90f46b03502..ff91cff866f 100644
--- a/src/include/catalog/catversion.h
+++ b/src/include/catalog/catversion.h
@@ -57,6 +57,6 @@
  */
 
 /*							yyyymmddN */
-#define CATALOG_VERSION_NO	202603101
+#define CATALOG_VERSION_NO	202603111
 
 #endif
diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out
index 71d7262049e..9ed0a1756c0 100644
--- a/src/test/regress/expected/rules.out
+++ b/src/test/regress/expected/rules.out
@@ -2451,7 +2451,8 @@ pg_statio_all_sequences| SELECT c.oid AS relid,
     n.nspname AS schemaname,
     c.relname,
     (pg_stat_get_blocks_fetched(c.oid) - pg_stat_get_blocks_hit(c.oid)) AS blks_read,
-    pg_stat_get_blocks_hit(c.oid) AS blks_hit
+    pg_stat_get_blocks_hit(c.oid) AS blks_hit,
+    pg_stat_get_stat_reset_time(c.oid) AS stats_reset
    FROM (pg_class c
      LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace)))
   WHERE (c.relkind = 'S'::"char");
@@ -2493,7 +2494,8 @@ pg_statio_sys_sequences| SELECT relid,
     schemaname,
     relname,
     blks_read,
-    blks_hit
+    blks_hit,
+    stats_reset
    FROM pg_statio_all_sequences
   WHERE ((schemaname = ANY (ARRAY['pg_catalog'::name, 'information_schema'::name])) OR (schemaname ~ '^pg_toast'::text));
 pg_statio_sys_tables| SELECT relid,
@@ -2524,7 +2526,8 @@ pg_statio_user_sequences| SELECT relid,
     schemaname,
     relname,
     blks_read,
-    blks_hit
+    blks_hit,
+    stats_reset
    FROM pg_statio_all_sequences
   WHERE ((schemaname <> ALL (ARRAY['pg_catalog'::name, 'information_schema'::name])) AND (schemaname !~ '^pg_toast'::text));
 pg_statio_user_tables| SELECT relid,
diff --git a/src/test/regress/expected/stats.out b/src/test/regress/expected/stats.out
index 0d634c3af42..8b19602c503 100644
--- a/src/test/regress/expected/stats.out
+++ b/src/test/regress/expected/stats.out
@@ -1924,4 +1924,12 @@ SELECT stats_reset IS NOT NULL AS has_stats_reset
  t
 (1 row)
 
+-- Test that the stats_reset column in pg_statio_all_sequences is correctly maintained
+SELECT stats_reset IS NOT NULL AS has_stats_reset
+  FROM pg_statio_all_sequences LIMIT 1;
+ has_stats_reset 
+-----------------
+ t
+(1 row)
+
 -- End of Stats Test
diff --git a/src/test/regress/sql/stats.sql b/src/test/regress/sql/stats.sql
index e5fb90cf0c3..0d1fac95e9f 100644
--- a/src/test/regress/sql/stats.sql
+++ b/src/test/regress/sql/stats.sql
@@ -949,4 +949,8 @@ SELECT pg_stat_reset();
 SELECT stats_reset IS NOT NULL AS has_stats_reset
   FROM pg_stat_database_conflicts WHERE datname = current_database();
 
+-- Test that the stats_reset column in pg_statio_all_sequences is correctly maintained
+SELECT stats_reset IS NOT NULL AS has_stats_reset
+  FROM pg_statio_all_sequences LIMIT 1;
+
 -- End of Stats Test
-- 
2.53.0.880.g73c4285caa-goog


