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

Lines changed: 4 additions & 2 deletions
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

Lines changed: 4 additions & 2 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy