v4-0001-Add-some-regression-tests-for-pg_freespacemap.patch
text/x-diff
Filename: v4-0001-Add-some-regression-tests-for-pg_freespacemap.patch
Type: text/x-diff
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v4-0001
Subject: Add some regression tests for pg_freespacemap
| File | + | − |
|---|---|---|
| contrib/pg_freespacemap/expected/pg_freespacemap.out | 85 | 0 |
| contrib/pg_freespacemap/.gitignore | 4 | 0 |
| contrib/pg_freespacemap/Makefile | 2 | 0 |
| contrib/pg_freespacemap/sql/pg_freespacemap.sql | 32 | 0 |
From 10002eaed60e3128cfe93c3908254eed81341e52 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@paquier.xyz>
Date: Wed, 23 Mar 2022 15:00:13 +0900
Subject: [PATCH v4] Add some regression tests for pg_freespacemap
---
contrib/pg_freespacemap/.gitignore | 4 +
contrib/pg_freespacemap/Makefile | 2 +
.../expected/pg_freespacemap.out | 85 +++++++++++++++++++
.../pg_freespacemap/sql/pg_freespacemap.sql | 32 +++++++
4 files changed, 123 insertions(+)
create mode 100644 contrib/pg_freespacemap/.gitignore
create mode 100644 contrib/pg_freespacemap/expected/pg_freespacemap.out
create mode 100644 contrib/pg_freespacemap/sql/pg_freespacemap.sql
diff --git a/contrib/pg_freespacemap/.gitignore b/contrib/pg_freespacemap/.gitignore
new file mode 100644
index 0000000000..5dcb3ff972
--- /dev/null
+++ b/contrib/pg_freespacemap/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/contrib/pg_freespacemap/Makefile b/contrib/pg_freespacemap/Makefile
index da40b80c7c..2d525a1284 100644
--- a/contrib/pg_freespacemap/Makefile
+++ b/contrib/pg_freespacemap/Makefile
@@ -10,6 +10,8 @@ DATA = pg_freespacemap--1.1.sql pg_freespacemap--1.1--1.2.sql \
pg_freespacemap--1.0--1.1.sql
PGFILEDESC = "pg_freespacemap - monitoring of free space map"
+REGRESS = pg_freespacemap
+
ifdef USE_PGXS
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
diff --git a/contrib/pg_freespacemap/expected/pg_freespacemap.out b/contrib/pg_freespacemap/expected/pg_freespacemap.out
new file mode 100644
index 0000000000..c0f71ba8aa
--- /dev/null
+++ b/contrib/pg_freespacemap/expected/pg_freespacemap.out
@@ -0,0 +1,85 @@
+CREATE EXTENSION pg_freespacemap;
+CREATE TABLE freespace_tab (c1 int) WITH (autovacuum_enabled = off);
+CREATE INDEX freespace_brin ON freespace_tab USING brin (c1);
+CREATE INDEX freespace_btree ON freespace_tab USING btree (c1);
+CREATE INDEX freespace_hash ON freespace_tab USING hash (c1);
+-- Report all the sizes of FSMs for all the relation blocks involved here.
+WITH rel AS (SELECT oid::regclass AS id FROM pg_class WHERE relname ~ 'freespace')
+ SELECT rel.id, fsm.blkno, (fsm.avail > 0) AS is_avail
+ FROM rel, LATERAL pg_freespace(rel.id) AS fsm
+ ORDER BY 1, 2;
+ id | blkno | is_avail
+-----------------+-------+----------
+ freespace_brin | 0 | f
+ freespace_brin | 1 | f
+ freespace_brin | 2 | t
+ freespace_btree | 0 | f
+ freespace_hash | 0 | f
+ freespace_hash | 1 | f
+ freespace_hash | 2 | f
+ freespace_hash | 3 | f
+ freespace_hash | 4 | f
+ freespace_hash | 5 | f
+ freespace_hash | 6 | f
+ freespace_hash | 7 | f
+ freespace_hash | 8 | f
+ freespace_hash | 9 | f
+(14 rows)
+
+INSERT INTO freespace_tab VALUES (1);
+VACUUM freespace_tab;
+WITH rel AS (SELECT oid::regclass AS id FROM pg_class WHERE relname ~ 'freespace')
+ SELECT rel.id, fsm.blkno, (fsm.avail > 0) AS is_avail
+ FROM rel, LATERAL pg_freespace(rel.id) AS fsm
+ ORDER BY 1, 2;
+ id | blkno | is_avail
+-----------------+-------+----------
+ freespace_tab | 0 | t
+ freespace_brin | 0 | f
+ freespace_brin | 1 | f
+ freespace_brin | 2 | t
+ freespace_btree | 0 | f
+ freespace_btree | 1 | f
+ freespace_hash | 0 | f
+ freespace_hash | 1 | f
+ freespace_hash | 2 | f
+ freespace_hash | 3 | f
+ freespace_hash | 4 | f
+ freespace_hash | 5 | f
+ freespace_hash | 6 | f
+ freespace_hash | 7 | f
+ freespace_hash | 8 | f
+ freespace_hash | 9 | f
+(16 rows)
+
+DELETE FROM freespace_tab;
+VACUUM freespace_tab;
+WITH rel AS (SELECT oid::regclass AS id FROM pg_class WHERE relname ~ 'freespace')
+ SELECT rel.id, fsm.blkno, (fsm.avail > 0) AS is_avail
+ FROM rel, LATERAL pg_freespace(rel.id) AS fsm
+ ORDER BY 1, 2;
+ id | blkno | is_avail
+-----------------+-------+----------
+ freespace_brin | 0 | f
+ freespace_brin | 1 | f
+ freespace_brin | 2 | t
+ freespace_btree | 0 | f
+ freespace_btree | 1 | f
+ freespace_hash | 0 | f
+ freespace_hash | 1 | f
+ freespace_hash | 2 | f
+ freespace_hash | 3 | f
+ freespace_hash | 4 | f
+ freespace_hash | 5 | f
+ freespace_hash | 6 | f
+ freespace_hash | 7 | f
+ freespace_hash | 8 | f
+ freespace_hash | 9 | f
+(15 rows)
+
+-- failures with incorrect block number
+SELECT * FROM pg_freespace('freespace_tab', -1);
+ERROR: invalid block number
+SELECT * FROM pg_freespace('freespace_tab', 4294967295);
+ERROR: invalid block number
+DROP TABLE freespace_tab;
diff --git a/contrib/pg_freespacemap/sql/pg_freespacemap.sql b/contrib/pg_freespacemap/sql/pg_freespacemap.sql
new file mode 100644
index 0000000000..b8d0405c63
--- /dev/null
+++ b/contrib/pg_freespacemap/sql/pg_freespacemap.sql
@@ -0,0 +1,32 @@
+CREATE EXTENSION pg_freespacemap;
+
+CREATE TABLE freespace_tab (c1 int) WITH (autovacuum_enabled = off);
+CREATE INDEX freespace_brin ON freespace_tab USING brin (c1);
+CREATE INDEX freespace_btree ON freespace_tab USING btree (c1);
+CREATE INDEX freespace_hash ON freespace_tab USING hash (c1);
+
+-- Report all the sizes of FSMs for all the relation blocks involved here.
+WITH rel AS (SELECT oid::regclass AS id FROM pg_class WHERE relname ~ 'freespace')
+ SELECT rel.id, fsm.blkno, (fsm.avail > 0) AS is_avail
+ FROM rel, LATERAL pg_freespace(rel.id) AS fsm
+ ORDER BY 1, 2;
+
+INSERT INTO freespace_tab VALUES (1);
+VACUUM freespace_tab;
+WITH rel AS (SELECT oid::regclass AS id FROM pg_class WHERE relname ~ 'freespace')
+ SELECT rel.id, fsm.blkno, (fsm.avail > 0) AS is_avail
+ FROM rel, LATERAL pg_freespace(rel.id) AS fsm
+ ORDER BY 1, 2;
+
+DELETE FROM freespace_tab;
+VACUUM freespace_tab;
+WITH rel AS (SELECT oid::regclass AS id FROM pg_class WHERE relname ~ 'freespace')
+ SELECT rel.id, fsm.blkno, (fsm.avail > 0) AS is_avail
+ FROM rel, LATERAL pg_freespace(rel.id) AS fsm
+ ORDER BY 1, 2;
+
+-- failures with incorrect block number
+SELECT * FROM pg_freespace('freespace_tab', -1);
+SELECT * FROM pg_freespace('freespace_tab', 4294967295);
+
+DROP TABLE freespace_tab;
--
2.35.1