v2-0009-Make-pg_stat_clear_snapshot-return-the-reset-time.patch
application/octet-stream
Filename: v2-0009-Make-pg_stat_clear_snapshot-return-the-reset-time.patch
Type: application/octet-stream
Part: 8
From e71f3aa6f83195f034b7a3006536998d42bf79c7 Mon Sep 17 00:00:00 2001
From: Shinya Kato <shinya11.kato@gmail.com>
Date: Fri, 2 May 2025 19:08:45 +0900
Subject: [PATCH v2 9/9] Make pg_stat_clear_snapshot() return the reset time
---
doc/src/sgml/monitoring.sgml | 5 ++--
src/backend/utils/activity/pgstat.c | 4 +++-
src/backend/utils/adt/pgstatfuncs.c | 6 +++--
src/include/catalog/pg_proc.dat | 2 +-
src/include/pgstat.h | 2 +-
src/test/isolation/expected/stats.out | 32 ++++++++++++-------------
src/test/isolation/expected/stats_1.out | 32 ++++++++++++-------------
src/test/isolation/specs/stats.spec | 2 +-
src/test/regress/expected/stats.out | 8 +++----
src/test/regress/sql/stats.sql | 2 +-
10 files changed, 50 insertions(+), 45 deletions(-)
diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml
index e7ba7932b1a..8a1632eae0c 100644
--- a/doc/src/sgml/monitoring.sgml
+++ b/doc/src/sgml/monitoring.sgml
@@ -4995,10 +4995,11 @@ description | Waiting for a newly initialized WAL file to reach durable storage
<primary>pg_stat_clear_snapshot</primary>
</indexterm>
<function>pg_stat_clear_snapshot</function> ()
- <returnvalue>void</returnvalue>
+ <returnvalue>timestamp with time zone</returnvalue>
</para>
<para>
- Discards the current statistics snapshot or cached information.
+ Discards the current statistics snapshot or cached information, and
+ returns the time of the discard.
</para></entry>
</row>
diff --git a/src/backend/utils/activity/pgstat.c b/src/backend/utils/activity/pgstat.c
index a9e1e7bd7ce..f53dbfe6a51 100644
--- a/src/backend/utils/activity/pgstat.c
+++ b/src/backend/utils/activity/pgstat.c
@@ -902,7 +902,7 @@ pgstat_reset_of_kind(PgStat_Kind kind)
* the no-longer-wanted snapshot. Updates of stats_fetch_consistency can
* cause this routine to be called.
*/
-void
+TimestampTz
pgstat_clear_snapshot(void)
{
pgstat_assert_is_up();
@@ -932,6 +932,8 @@ pgstat_clear_snapshot(void)
/* Reset this flag, as it may be possible that a cleanup was forced. */
force_stats_snapshot_clear = false;
+
+ return GetCurrentTimestamp();
}
void *
diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c
index 7b23fce1712..422944e75f2 100644
--- a/src/backend/utils/adt/pgstatfuncs.c
+++ b/src/backend/utils/adt/pgstatfuncs.c
@@ -1837,9 +1837,11 @@ pg_stat_get_snapshot_timestamp(PG_FUNCTION_ARGS)
Datum
pg_stat_clear_snapshot(PG_FUNCTION_ARGS)
{
- pgstat_clear_snapshot();
+ TimestampTz ts;
- PG_RETURN_VOID();
+ ts = pgstat_clear_snapshot();
+
+ PG_RETURN_TIMESTAMPTZ(ts);
}
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 1f7f5f95d01..a02bb054114 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -6142,7 +6142,7 @@
{ oid => '2230',
descr => 'statistics: discard current transaction\'s statistics snapshot',
proname => 'pg_stat_clear_snapshot', proisstrict => 'f', provolatile => 'v',
- proparallel => 'r', prorettype => 'void', proargtypes => '',
+ proparallel => 'r', prorettype => 'timestamptz', proargtypes => '',
prosrc => 'pg_stat_clear_snapshot' },
{ oid => '2137',
descr => 'statistics: force stats to be flushed after the next commit',
diff --git a/src/include/pgstat.h b/src/include/pgstat.h
index d2d9479fc0f..b5eb00cbc9e 100644
--- a/src/include/pgstat.h
+++ b/src/include/pgstat.h
@@ -529,7 +529,7 @@ extern TimestampTz pgstat_reset(PgStat_Kind kind, Oid dboid, uint64 objid);
extern TimestampTz pgstat_reset_of_kind(PgStat_Kind kind);
/* stats accessors */
-extern void pgstat_clear_snapshot(void);
+extern TimestampTz pgstat_clear_snapshot(void);
extern TimestampTz pgstat_get_stat_snapshot_timestamp(bool *have_snapshot);
/* helpers */
diff --git a/src/test/isolation/expected/stats.out b/src/test/isolation/expected/stats.out
index 132f8e55fc3..43cfc1880c6 100644
--- a/src/test/isolation/expected/stats.out
+++ b/src/test/isolation/expected/stats.out
@@ -3422,10 +3422,10 @@ step s1_slru_check_stats:
t
(1 row)
-step s1_clear_snapshot: SELECT pg_stat_clear_snapshot();
-pg_stat_clear_snapshot
-----------------------
-
+step s1_clear_snapshot: SELECT pg_stat_clear_snapshot() IS NOT NULL AS t;
+t
+-
+t
(1 row)
step s1_slru_check_stats:
@@ -3495,10 +3495,10 @@ step s1_slru_check_stats:
f
(1 row)
-step s1_clear_snapshot: SELECT pg_stat_clear_snapshot();
-pg_stat_clear_snapshot
-----------------------
-
+step s1_clear_snapshot: SELECT pg_stat_clear_snapshot() IS NOT NULL AS t;
+t
+-
+t
(1 row)
step s1_slru_check_stats:
@@ -3568,10 +3568,10 @@ step s1_slru_check_stats:
f
(1 row)
-step s1_clear_snapshot: SELECT pg_stat_clear_snapshot();
-pg_stat_clear_snapshot
-----------------------
-
+step s1_clear_snapshot: SELECT pg_stat_clear_snapshot() IS NOT NULL AS t;
+t
+-
+t
(1 row)
step s1_slru_check_stats:
@@ -3712,10 +3712,10 @@ name |pg_stat_get_function_calls|total_above_zero|self_above_zero
test_stat_func| | |
(1 row)
-step s1_clear_snapshot: SELECT pg_stat_clear_snapshot();
-pg_stat_clear_snapshot
-----------------------
-
+step s1_clear_snapshot: SELECT pg_stat_clear_snapshot() IS NOT NULL AS t;
+t
+-
+t
(1 row)
step s1_func_stats:
diff --git a/src/test/isolation/expected/stats_1.out b/src/test/isolation/expected/stats_1.out
index 2b16808fbb5..f83420dcd7d 100644
--- a/src/test/isolation/expected/stats_1.out
+++ b/src/test/isolation/expected/stats_1.out
@@ -3446,10 +3446,10 @@ step s1_slru_check_stats:
t
(1 row)
-step s1_clear_snapshot: SELECT pg_stat_clear_snapshot();
-pg_stat_clear_snapshot
-----------------------
-
+step s1_clear_snapshot: SELECT pg_stat_clear_snapshot() IS NOT NULL AS t;
+t
+-
+t
(1 row)
step s1_slru_check_stats:
@@ -3519,10 +3519,10 @@ step s1_slru_check_stats:
f
(1 row)
-step s1_clear_snapshot: SELECT pg_stat_clear_snapshot();
-pg_stat_clear_snapshot
-----------------------
-
+step s1_clear_snapshot: SELECT pg_stat_clear_snapshot() IS NOT NULL AS t;
+t
+-
+t
(1 row)
step s1_slru_check_stats:
@@ -3592,10 +3592,10 @@ step s1_slru_check_stats:
f
(1 row)
-step s1_clear_snapshot: SELECT pg_stat_clear_snapshot();
-pg_stat_clear_snapshot
-----------------------
-
+step s1_clear_snapshot: SELECT pg_stat_clear_snapshot() IS NOT NULL AS t;
+t
+-
+t
(1 row)
step s1_slru_check_stats:
@@ -3736,10 +3736,10 @@ name |pg_stat_get_function_calls|total_above_zero|self_above_zero
test_stat_func| | |
(1 row)
-step s1_clear_snapshot: SELECT pg_stat_clear_snapshot();
-pg_stat_clear_snapshot
-----------------------
-
+step s1_clear_snapshot: SELECT pg_stat_clear_snapshot() IS NOT NULL AS t;
+t
+-
+t
(1 row)
step s1_func_stats:
diff --git a/src/test/isolation/specs/stats.spec b/src/test/isolation/specs/stats.spec
index 3893d3983f0..7e211d3fa83 100644
--- a/src/test/isolation/specs/stats.spec
+++ b/src/test/isolation/specs/stats.spec
@@ -40,7 +40,7 @@ setup { SET stats_fetch_consistency = 'none'; }
step s1_fetch_consistency_none { SET stats_fetch_consistency = 'none'; }
step s1_fetch_consistency_cache { SET stats_fetch_consistency = 'cache'; }
step s1_fetch_consistency_snapshot { SET stats_fetch_consistency = 'snapshot'; }
-step s1_clear_snapshot { SELECT pg_stat_clear_snapshot(); }
+step s1_clear_snapshot { SELECT pg_stat_clear_snapshot() IS NOT NULL AS t; }
step s1_begin { BEGIN; }
step s1_commit { COMMIT; }
step s1_rollback { ROLLBACK; }
diff --git a/src/test/regress/expected/stats.out b/src/test/regress/expected/stats.out
index 4c5612ab1ba..7d13fca9e51 100644
--- a/src/test/regress/expected/stats.out
+++ b/src/test/regress/expected/stats.out
@@ -1147,10 +1147,10 @@ SELECT pg_stat_get_snapshot_timestamp() >= NOW();
(1 row)
-- shows NULL again after clearing
-SELECT pg_stat_clear_snapshot();
- pg_stat_clear_snapshot
-------------------------
-
+SELECT pg_stat_clear_snapshot() IS NOT NULL AS t;
+ t
+---
+ t
(1 row)
SELECT pg_stat_get_snapshot_timestamp();
diff --git a/src/test/regress/sql/stats.sql b/src/test/regress/sql/stats.sql
index 62a8424d4c0..aab46b91ad0 100644
--- a/src/test/regress/sql/stats.sql
+++ b/src/test/regress/sql/stats.sql
@@ -529,7 +529,7 @@ SELECT pg_stat_get_snapshot_timestamp();
SELECT pg_stat_get_function_calls(0);
SELECT pg_stat_get_snapshot_timestamp() >= NOW();
-- shows NULL again after clearing
-SELECT pg_stat_clear_snapshot();
+SELECT pg_stat_clear_snapshot() IS NOT NULL AS t;
SELECT pg_stat_get_snapshot_timestamp();
COMMIT;
--
2.47.3