Skip to content

Commit fe246d1

Browse files
committed
Improve stability of test with vacuum_truncate in reloptions.sql
This test has been using a simple VACUUM with pg_relation_size() to check if a relation gets physically truncated or not, but forgot the fact that some concurrent activity, like checkpoint buffer writes, could cause some pages to be skipped. The second test enabling vacuum_truncate could fail, seeing a non-empty relation. The first test would not have failed, but could finish by testing a behavior different than the one aimed for. Both tests gain a FREEZE option, to make the vacuums more aggressive and prevent page skips. This is similar to the issues fixed in c2dc1a7. Author: Arseny Sher Reviewed-by: Masahiko Sawada Discussion: https://postgr.es/m/87tuotr2hh.fsf@ars-thinkpad backpatch-through: 12
1 parent 1ebdec8 commit fe246d1

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

src/test/regress/expected/reloptions.out

+4-2
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,8 @@ SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test'::regclass;
102102
INSERT INTO reloptions_test VALUES (1, NULL), (NULL, NULL);
103103
ERROR: null value in column "i" of relation "reloptions_test" violates not-null constraint
104104
DETAIL: Failing row contains (null, null).
105-
VACUUM reloptions_test;
105+
-- Do an aggressive vacuum to prevent page-skipping.
106+
VACUUM FREEZE reloptions_test;
106107
SELECT pg_relation_size('reloptions_test') > 0;
107108
?column?
108109
----------
@@ -127,7 +128,8 @@ SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test'::regclass;
127128
INSERT INTO reloptions_test VALUES (1, NULL), (NULL, NULL);
128129
ERROR: null value in column "i" of relation "reloptions_test" violates not-null constraint
129130
DETAIL: Failing row contains (null, null).
130-
VACUUM reloptions_test;
131+
-- Do an aggressive vacuum to prevent page-skipping.
132+
VACUUM FREEZE reloptions_test;
131133
SELECT pg_relation_size('reloptions_test') = 0;
132134
?column?
133135
----------

src/test/regress/sql/reloptions.sql

+4-2
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ CREATE TABLE reloptions_test(i INT NOT NULL, j text)
6161
autovacuum_enabled=false);
6262
SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test'::regclass;
6363
INSERT INTO reloptions_test VALUES (1, NULL), (NULL, NULL);
64-
VACUUM reloptions_test;
64+
-- Do an aggressive vacuum to prevent page-skipping.
65+
VACUUM FREEZE reloptions_test;
6566
SELECT pg_relation_size('reloptions_test') > 0;
6667

6768
SELECT reloptions FROM pg_class WHERE oid =
@@ -71,7 +72,8 @@ SELECT reloptions FROM pg_class WHERE oid =
7172
ALTER TABLE reloptions_test RESET (vacuum_truncate);
7273
SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test'::regclass;
7374
INSERT INTO reloptions_test VALUES (1, NULL), (NULL, NULL);
74-
VACUUM reloptions_test;
75+
-- Do an aggressive vacuum to prevent page-skipping.
76+
VACUUM FREEZE reloptions_test;
7577
SELECT pg_relation_size('reloptions_test') = 0;
7678

7779
-- Test toast.* options

0 commit comments

Comments
 (0)