From 428f06d17024678953e8fc61ccaf05257cb5aeb7 Mon Sep 17 00:00:00 2001 From: Shinya Kato Date: Fri, 2 May 2025 18:48:28 +0900 Subject: [PATCH v1 8/9] Make pg_stat_reset_subscription_stats() return the reset time --- doc/src/sgml/monitoring.sgml | 8 ++++---- src/backend/utils/adt/pgstatfuncs.c | 7 ++++--- src/include/catalog/pg_proc.dat | 2 +- src/test/regress/expected/subscription.out | 16 ++++++++-------- src/test/regress/sql/subscription.sql | 4 ++-- 5 files changed, 19 insertions(+), 18 deletions(-) diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index 27f22e6fd76..e7ba7932b1a 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -5203,13 +5203,13 @@ description | Waiting for a newly initialized WAL file to reach durable storage pg_stat_reset_subscription_stats pg_stat_reset_subscription_stats ( oid ) - void + timestamp with time zone Resets statistics for a single subscription shown in the - pg_stat_subscription_stats view to zero. If - the argument is NULL, reset statistics for all - subscriptions. + pg_stat_subscription_stats view to zero, and + returns the time of the reset. If the argument is + NULL, reset statistics for all subscriptions. This function is restricted to superusers by default, but other users diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index 7d9df708266..7b23fce1712 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -2020,11 +2020,12 @@ Datum pg_stat_reset_subscription_stats(PG_FUNCTION_ARGS) { Oid subid; + TimestampTz ts; if (PG_ARGISNULL(0)) { /* Clear all subscription stats */ - pgstat_reset_of_kind(PGSTAT_KIND_SUBSCRIPTION); + ts = pgstat_reset_of_kind(PGSTAT_KIND_SUBSCRIPTION); } else { @@ -2034,10 +2035,10 @@ pg_stat_reset_subscription_stats(PG_FUNCTION_ARGS) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid subscription OID %u", subid))); - pgstat_reset(PGSTAT_KIND_SUBSCRIPTION, InvalidOid, subid); + ts = pgstat_reset(PGSTAT_KIND_SUBSCRIPTION, InvalidOid, subid); } - PG_RETURN_VOID(); + PG_RETURN_TIMESTAMPTZ(ts); } Datum diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index fa1a26d3f03..48d6f03afeb 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -6173,7 +6173,7 @@ { oid => '6232', descr => 'statistics: reset collected statistics for a single subscription', proname => 'pg_stat_reset_subscription_stats', proisstrict => 'f', - provolatile => 'v', prorettype => 'void', proargtypes => 'oid', + provolatile => 'v', prorettype => 'timestamptz', proargtypes => 'oid', prosrc => 'pg_stat_reset_subscription_stats' }, { oid => '3163', descr => 'current trigger depth', diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out index a98c97f7616..e41d90c95a4 100644 --- a/src/test/regress/expected/subscription.out +++ b/src/test/regress/expected/subscription.out @@ -47,10 +47,10 @@ SELECT subname, stats_reset IS NULL stats_reset_is_null FROM pg_stat_subscriptio regress_testsub | t (1 row) -SELECT pg_stat_reset_subscription_stats(oid) FROM pg_subscription WHERE subname = 'regress_testsub'; - pg_stat_reset_subscription_stats ----------------------------------- - +SELECT pg_stat_reset_subscription_stats(oid) IS NOT NULL AS t FROM pg_subscription WHERE subname = 'regress_testsub'; + t +--- + t (1 row) SELECT subname, stats_reset IS NULL stats_reset_is_null FROM pg_stat_subscription_stats WHERE subname = 'regress_testsub'; @@ -61,10 +61,10 @@ SELECT subname, stats_reset IS NULL stats_reset_is_null FROM pg_stat_subscriptio -- Reset the stats again and check if the new reset_stats is updated. SELECT stats_reset as prev_stats_reset FROM pg_stat_subscription_stats WHERE subname = 'regress_testsub' \gset -SELECT pg_stat_reset_subscription_stats(oid) FROM pg_subscription WHERE subname = 'regress_testsub'; - pg_stat_reset_subscription_stats ----------------------------------- - +SELECT pg_stat_reset_subscription_stats(oid) IS NOT NULL AS t FROM pg_subscription WHERE subname = 'regress_testsub'; + t +--- + t (1 row) SELECT :'prev_stats_reset' < stats_reset FROM pg_stat_subscription_stats WHERE subname = 'regress_testsub'; diff --git a/src/test/regress/sql/subscription.sql b/src/test/regress/sql/subscription.sql index f0f714fe747..13b1e2ed797 100644 --- a/src/test/regress/sql/subscription.sql +++ b/src/test/regress/sql/subscription.sql @@ -34,12 +34,12 @@ SELECT obj_description(s.oid, 'pg_subscription') FROM pg_subscription s; -- Check if the subscription stats are created and stats_reset is updated -- by pg_stat_reset_subscription_stats(). SELECT subname, stats_reset IS NULL stats_reset_is_null FROM pg_stat_subscription_stats WHERE subname = 'regress_testsub'; -SELECT pg_stat_reset_subscription_stats(oid) FROM pg_subscription WHERE subname = 'regress_testsub'; +SELECT pg_stat_reset_subscription_stats(oid) IS NOT NULL AS t FROM pg_subscription WHERE subname = 'regress_testsub'; SELECT subname, stats_reset IS NULL stats_reset_is_null FROM pg_stat_subscription_stats WHERE subname = 'regress_testsub'; -- Reset the stats again and check if the new reset_stats is updated. SELECT stats_reset as prev_stats_reset FROM pg_stat_subscription_stats WHERE subname = 'regress_testsub' \gset -SELECT pg_stat_reset_subscription_stats(oid) FROM pg_subscription WHERE subname = 'regress_testsub'; +SELECT pg_stat_reset_subscription_stats(oid) IS NOT NULL AS t FROM pg_subscription WHERE subname = 'regress_testsub'; SELECT :'prev_stats_reset' < stats_reset FROM pg_stat_subscription_stats WHERE subname = 'regress_testsub'; -- fail - name already exists -- 2.47.1