v2-0006-Make-pg_stat_reset_slru-return-the-reset-time.patch
application/octet-stream
Filename: v2-0006-Make-pg_stat_reset_slru-return-the-reset-time.patch
Type: application/octet-stream
Part: 5
From 33dabccd704d105a89f19d3f39f2db6c8498aa35 Mon Sep 17 00:00:00 2001
From: Shinya Kato <shinya11.kato@gmail.com>
Date: Fri, 2 May 2025 16:57:23 +0900
Subject: [PATCH v2 6/9] Make pg_stat_reset_slru() return the reset time
---
doc/src/sgml/monitoring.sgml | 4 ++--
src/backend/catalog/system_functions.sql | 2 +-
src/backend/utils/activity/pgstat_slru.c | 4 +++-
src/backend/utils/adt/pgstatfuncs.c | 7 ++++---
src/include/catalog/pg_proc.dat | 2 +-
src/include/pgstat.h | 2 +-
src/test/regress/expected/stats.out | 16 ++++++++--------
src/test/regress/sql/stats.sql | 4 ++--
8 files changed, 22 insertions(+), 19 deletions(-)
diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml
index 2aeb835a7ab..df90f4668c4 100644
--- a/doc/src/sgml/monitoring.sgml
+++ b/doc/src/sgml/monitoring.sgml
@@ -5151,11 +5151,11 @@ description | Waiting for a newly initialized WAL file to reach durable storage
<primary>pg_stat_reset_slru</primary>
</indexterm>
<function>pg_stat_reset_slru</function> ( [ <parameter>target</parameter> <type>text</type> <literal>DEFAULT</literal> <literal>NULL</literal> ] )
- <returnvalue>void</returnvalue>
+ <returnvalue>timestamp with time zone</returnvalue>
</para>
<para>
Resets statistics to zero for a single SLRU cache, or for all SLRUs in
- the cluster. If <parameter>target</parameter> is
+ the cluster, and returns the time of the reset. If <parameter>target</parameter> is
<literal>NULL</literal> or is not specified, all the counters shown in
the <structname>pg_stat_slru</structname> view for all SLRU caches are
reset. The argument can be one of
diff --git a/src/backend/catalog/system_functions.sql b/src/backend/catalog/system_functions.sql
index 0f19c2c478b..4aa93250d06 100644
--- a/src/backend/catalog/system_functions.sql
+++ b/src/backend/catalog/system_functions.sql
@@ -645,7 +645,7 @@ AS 'pg_stat_reset_shared';
CREATE OR REPLACE FUNCTION
pg_stat_reset_slru(target text DEFAULT NULL)
-RETURNS void
+RETURNS timestamp with time zone
LANGUAGE INTERNAL
CALLED ON NULL INPUT VOLATILE PARALLEL SAFE
AS 'pg_stat_reset_slru';
diff --git a/src/backend/utils/activity/pgstat_slru.c b/src/backend/utils/activity/pgstat_slru.c
index da50f8a0457..89a534048fb 100644
--- a/src/backend/utils/activity/pgstat_slru.c
+++ b/src/backend/utils/activity/pgstat_slru.c
@@ -41,7 +41,7 @@ static bool have_slrustats = false;
* Permission checking for this function is managed through the normal
* GRANT system.
*/
-void
+TimestampTz
pgstat_reset_slru(const char *name)
{
TimestampTz ts = GetCurrentTimestamp();
@@ -49,6 +49,8 @@ pgstat_reset_slru(const char *name)
Assert(name != NULL);
pgstat_reset_slru_counter_internal(pgstat_get_slru_index(name), ts);
+
+ return ts;
}
/*
diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c
index f987d91d040..b28ceab91d9 100644
--- a/src/backend/utils/adt/pgstatfuncs.c
+++ b/src/backend/utils/adt/pgstatfuncs.c
@@ -1981,16 +1981,17 @@ Datum
pg_stat_reset_slru(PG_FUNCTION_ARGS)
{
char *target = NULL;
+ TimestampTz ts;
if (PG_ARGISNULL(0))
- pgstat_reset_of_kind(PGSTAT_KIND_SLRU);
+ ts = pgstat_reset_of_kind(PGSTAT_KIND_SLRU);
else
{
target = text_to_cstring(PG_GETARG_TEXT_PP(0));
- pgstat_reset_slru(target);
+ ts = pgstat_reset_slru(target);
}
- PG_RETURN_VOID();
+ PG_RETURN_TIMESTAMPTZ(ts);
}
/* Reset replication slots stats (a specific one or all of them). */
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index c08ebb72b25..87b14848c22 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -6175,7 +6175,7 @@
{ oid => '2307',
descr => 'statistics: reset collected statistics for a single SLRU',
proname => 'pg_stat_reset_slru', proisstrict => 'f', provolatile => 'v',
- prorettype => 'void', proargtypes => 'text', proargnames => '{target}',
+ prorettype => 'timestamptz', proargtypes => 'text', proargnames => '{target}',
prosrc => 'pg_stat_reset_slru' },
{ oid => '6170',
descr => 'statistics: reset collected statistics for a single replication slot',
diff --git a/src/include/pgstat.h b/src/include/pgstat.h
index 03bcbb923cf..2d741980ef5 100644
--- a/src/include/pgstat.h
+++ b/src/include/pgstat.h
@@ -746,7 +746,7 @@ extern PgStat_StatReplSlotEntry *pgstat_fetch_replslot(NameData slotname);
* Functions in pgstat_slru.c
*/
-extern void pgstat_reset_slru(const char *);
+extern TimestampTz pgstat_reset_slru(const char *);
extern void pgstat_count_slru_blocks_zeroed(int slru_idx);
extern void pgstat_count_slru_blocks_hit(int slru_idx);
extern void pgstat_count_slru_blocks_read(int slru_idx);
diff --git a/src/test/regress/expected/stats.out b/src/test/regress/expected/stats.out
index 91b3be1a8af..4c5612ab1ba 100644
--- a/src/test/regress/expected/stats.out
+++ b/src/test/regress/expected/stats.out
@@ -980,10 +980,10 @@ WHERE pg_stat_get_backend_pid(beid) = pg_backend_pid();
-- Test that reset_slru with a specified SLRU works.
SELECT stats_reset AS slru_commit_ts_reset_ts FROM pg_stat_slru WHERE name = 'commit_timestamp' \gset
SELECT stats_reset AS slru_notify_reset_ts FROM pg_stat_slru WHERE name = 'notify' \gset
-SELECT pg_stat_reset_slru('commit_timestamp');
- pg_stat_reset_slru
---------------------
-
+SELECT pg_stat_reset_slru('commit_timestamp') IS NOT NULL AS t;
+ t
+---
+ t
(1 row)
SELECT stats_reset > :'slru_commit_ts_reset_ts'::timestamptz FROM pg_stat_slru WHERE name = 'commit_timestamp';
@@ -994,10 +994,10 @@ SELECT stats_reset > :'slru_commit_ts_reset_ts'::timestamptz FROM pg_stat_slru W
SELECT stats_reset AS slru_commit_ts_reset_ts FROM pg_stat_slru WHERE name = 'commit_timestamp' \gset
-- Test that multiple SLRUs are reset when no specific SLRU provided to reset function
-SELECT pg_stat_reset_slru();
- pg_stat_reset_slru
---------------------
-
+SELECT pg_stat_reset_slru() IS NOT NULL AS t;
+ t
+---
+ t
(1 row)
SELECT stats_reset > :'slru_commit_ts_reset_ts'::timestamptz FROM pg_stat_slru WHERE name = 'commit_timestamp';
diff --git a/src/test/regress/sql/stats.sql b/src/test/regress/sql/stats.sql
index 77d3e1a845d..62a8424d4c0 100644
--- a/src/test/regress/sql/stats.sql
+++ b/src/test/regress/sql/stats.sql
@@ -467,12 +467,12 @@ WHERE pg_stat_get_backend_pid(beid) = pg_backend_pid();
-- Test that reset_slru with a specified SLRU works.
SELECT stats_reset AS slru_commit_ts_reset_ts FROM pg_stat_slru WHERE name = 'commit_timestamp' \gset
SELECT stats_reset AS slru_notify_reset_ts FROM pg_stat_slru WHERE name = 'notify' \gset
-SELECT pg_stat_reset_slru('commit_timestamp');
+SELECT pg_stat_reset_slru('commit_timestamp') IS NOT NULL AS t;
SELECT stats_reset > :'slru_commit_ts_reset_ts'::timestamptz FROM pg_stat_slru WHERE name = 'commit_timestamp';
SELECT stats_reset AS slru_commit_ts_reset_ts FROM pg_stat_slru WHERE name = 'commit_timestamp' \gset
-- Test that multiple SLRUs are reset when no specific SLRU provided to reset function
-SELECT pg_stat_reset_slru();
+SELECT pg_stat_reset_slru() IS NOT NULL AS t;
SELECT stats_reset > :'slru_commit_ts_reset_ts'::timestamptz FROM pg_stat_slru WHERE name = 'commit_timestamp';
SELECT stats_reset > :'slru_notify_reset_ts'::timestamptz FROM pg_stat_slru WHERE name = 'notify';
--
2.47.3