postgres.git / summary / log / commit / refs

commit    fe246d1c111d43fd60a1b0afff25ed09b7ae11eb
Author:   Michael Paquier <michael@paquier.xyz>
Date:     Fri Apr 02 00:44:42 2021 +0000

    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


src/test/regress/expected/reloptions.out | 6 ++++-- src/test/regress/sql/reloptions.sql | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/test/regress/expected/reloptions.out b/src/test/regress/expected/reloptions.out index 44c130409ff..bb7bd6e1e7e 100644 --- a/src/test/regress/expected/reloptions.out +++ b/src/test/regress/expected/reloptions.out @@ -102,7 +102,8 @@ SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test'::regclass; INSERT INTO reloptions_test VALUES (1, NULL), (NULL, NULL); ERROR: null value in column "i" of relation "reloptions_test" violates not-null constraint DETAIL: Failing row contains (null, null). -VACUUM reloptions_test; +-- Do an aggressive vacuum to prevent page-skipping. +VACUUM FREEZE reloptions_test; SELECT pg_relation_size('reloptions_test') > 0; ?column? ---------- @@ -127,7 +128,8 @@ SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test'::regclass; INSERT INTO reloptions_test VALUES (1, NULL), (NULL, NULL); ERROR: null value in column "i" of relation "reloptions_test" violates not-null constraint DETAIL: Failing row contains (null, null). -VACUUM reloptions_test; +-- Do an aggressive vacuum to prevent page-skipping. +VACUUM FREEZE reloptions_test; SELECT pg_relation_size('reloptions_test') = 0; ?column? ---------- diff --git a/src/test/regress/sql/reloptions.sql b/src/test/regress/sql/reloptions.sql index cac5b0bcb0d..95f7ab4189e 100644 --- a/src/test/regress/sql/reloptions.sql +++ b/src/test/regress/sql/reloptions.sql @@ -61,7 +61,8 @@ CREATE TABLE reloptions_test(i INT NOT NULL, j text) autovacuum_enabled=false); SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test'::regclass; INSERT INTO reloptions_test VALUES (1, NULL), (NULL, NULL); -VACUUM reloptions_test; +-- Do an aggressive vacuum to prevent page-skipping. +VACUUM FREEZE reloptions_test; SELECT pg_relation_size('reloptions_test') > 0; SELECT reloptions FROM pg_class WHERE oid = @@ -71,7 +72,8 @@ SELECT reloptions FROM pg_class WHERE oid = ALTER TABLE reloptions_test RESET (vacuum_truncate); SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test'::regclass; INSERT INTO reloptions_test VALUES (1, NULL), (NULL, NULL); -VACUUM reloptions_test; +-- Do an aggressive vacuum to prevent page-skipping. +VACUUM FREEZE reloptions_test; SELECT pg_relation_size('reloptions_test') = 0; -- Test toast.* options [parent: 1ebdec8c0329]