[PATCH v1 12/12] prune_xid-hist: tests
Renan Alves Fonseca <renanfonseca@gmail.com>
From: "Renan A. Fonseca" <renanfonseca@gmail.com>
To:
Date: 2025-05-30T14:17:22Z
Lists: pgsql-hackers
---
src/test/regress/sql/prune_xid_aux_check.sql | 29 +++++++++
src/test/regress/sql/prune_xid_hist.sql | 62 ++++++++++++++++++++
2 files changed, 91 insertions(+)
create mode 100644 src/test/regress/sql/prune_xid_aux_check.sql
create mode 100644 src/test/regress/sql/prune_xid_hist.sql
diff --git a/src/test/regress/sql/prune_xid_aux_check.sql b/src/test/regress/sql/prune_xid_aux_check.sql
new file mode 100644
index 00000000000..da2797c0e4e
--- /dev/null
+++ b/src/test/regress/sql/prune_xid_aux_check.sql
@@ -0,0 +1,29 @@
+
+select pg_stat_force_next_flush();
+analyze :tt; select relpages as tt_relpages from pg_class where relname=:'tt' \gset
+
+select pg_stat_get_prune_xid_freqs(:'tt'::regclass)::text::text[];
+
+with estimate as (
+ select bounds, sum(freqs::int) over (order by bounds::int) estimated_cumsum
+ from
+ unnest( pg_stat_get_prune_xid_bounds(:'tt'::regclass)::text::text[])
+ with ordinality as t1(bounds,ord)
+ natural join
+ unnest( pg_stat_get_prune_xid_freqs(:'tt'::regclass)::text::text[])
+ with ordinality as t2(freqs,ord)
+ order by bounds)
+, pageinspect_vals as (
+ select prune_xid
+ from generate_series(1,:tt_relpages) as t(n),
+ page_header(get_raw_page(:'tt', n-1))
+ where prune_xid::text!='0')
+
+select bounds,
+ estimated_cumsum,
+ (select count(*) from pageinspect_vals where prune_xid::text::int<=bounds::int)
+from estimate
+where bounds::int>0
+order by bounds::int;
+
+
diff --git a/src/test/regress/sql/prune_xid_hist.sql b/src/test/regress/sql/prune_xid_hist.sql
new file mode 100644
index 00000000000..3f87afc8f85
--- /dev/null
+++ b/src/test/regress/sql/prune_xid_hist.sql
@@ -0,0 +1,62 @@
+-- test UPDATE
+create table t1(a int) with (autovacuum_enabled='off');
+select pg_stat_get_prune_xid_freqs('t1'::regclass);
+
+insert into t1 (select generate_series(1,10000));
+select pg_stat_get_prune_xid_freqs('t1'::regclass);
+
+update t1 set a=a+1 where a % 3 = 0;select pg_stat_force_next_flush();
+update t1 set a=a+1 where a % 1 = 0;select pg_stat_force_next_flush();
+update t1 set a=a+1 where a % 7 = 0;select pg_stat_force_next_flush();
+update t1 set a=a+1 where a % 9 = 0;select pg_stat_force_next_flush();
+select pg_stat_get_prune_xid_freqs('t1'::regclass);
+update t1 set a=a+1 where a % 3 = 0;select pg_stat_force_next_flush();
+update t1 set a=a+1 where a % 1 = 0;select pg_stat_force_next_flush();
+update t1 set a=a+1 where a % 7 = 0;select pg_stat_force_next_flush();
+update t1 set a=a+1 where a % 9 = 0;select pg_stat_force_next_flush();
+select pg_stat_get_prune_xid_freqs('t1'::regclass);
+
+
+\set tt t1
+\ir prune_xid_aux_check.sql
+
+
+-- test DELETE
+create table t2(a int) with (autovacuum_enabled='off');
+select pg_stat_get_prune_xid_freqs('t2'::regclass);
+
+insert into t2 (select generate_series(1,10000));
+select pg_stat_get_prune_xid_freqs('t2'::regclass);
+
+delete from t2 where a%2=1;select pg_stat_force_next_flush();
+select pg_stat_get_prune_xid_freqs('t2'::regclass);
+
+\set tt t2
+\ir prune_xid_aux_check.sql
+
+delete from t2 where a%2=0;select pg_stat_force_next_flush();
+select pg_stat_get_prune_xid_freqs('t2'::regclass);
+
+insert into t2 (select generate_series(1,10000));
+delete from t2; select pg_stat_force_next_flush();
+select pg_stat_get_prune_xid_freqs('t2'::regclass);
+
+
+\set tt t2
+\ir prune_xid_aux_check.sql
+
+
+
+-- test VACUUM
+vacuum t1;
+\set tt t1
+\ir prune_xid_aux_check.sql
+
+vacuum t2;
+\set tt t2
+\ir prune_xid_aux_check.sql
+
+
+
+drop table t1;
+drop table t2;
--
2.47.0
--=-=-=--