Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc2dc1a7

Browse files
committed
Disable vacuum page skipping in selected test cases.
By default VACUUM will skip pages that it can't immediately getexclusive access to, which means that even activities as harmlessand unpredictable as checkpoint buffer writes might prevent a pagefrom being processed. Ordinarily this is no big deal, but we havea small number of test cases that examine the results of VACUUM'sprocessing and therefore will fail if the page of interest is skipped.This seems to be the explanation for some rare buildfarm failures.To fix, add the DISABLE_PAGE_SKIPPING option to the VACUUM commandsin tests where this could be an issue.In passing, remove a duplicated query in pageinspect/sql/page.sql.Back-patch as necessary (some of these cases are as old as v10).Discussion:https://postgr.es/m/413923.1611006484@sss.pgh.pa.us
1 parent6b4d304 commitc2dc1a7

File tree

7 files changed

+15
-31
lines changed

7 files changed

+15
-31
lines changed

‎contrib/amcheck/expected/check_heap.out

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ ERROR: ending block number must be between 0 and 0
109109
SELECT * FROM verify_heapam(relation := 'heaptest', startblock := 10000, endblock := 11000);
110110
ERROR: starting block number must be between 0 and 0
111111
-- Vacuum freeze to change the xids encountered in subsequent tests
112-
VACUUM FREEZE heaptest;
112+
VACUUM(FREEZE, DISABLE_PAGE_SKIPPING) heaptest;
113113
-- Check that valid options are not rejected nor corruption reported
114114
-- for a non-empty frozen table
115115
SELECT * FROM verify_heapam(relation := 'heaptest', skip := 'none');

‎contrib/amcheck/sql/check_heap.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ SELECT * FROM verify_heapam(relation := 'heaptest', startblock := 0, endblock :=
5151
SELECT*FROM verify_heapam(relation :='heaptest', startblock :=10000, endblock :=11000);
5252

5353
-- Vacuum freeze to change the xids encountered in subsequent tests
54-
VACUUM FREEZE heaptest;
54+
VACUUM(FREEZE, DISABLE_PAGE_SKIPPING) heaptest;
5555

5656
-- Check that valid options are not rejected nor corruption reported
5757
-- for a non-empty frozen table

‎contrib/amcheck/t/001_verify_heapam.pl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
# Check a corrupt table with all-frozen data
4747
#
4848
fresh_test_table('test');
49-
$node->safe_psql('postgres',q(VACUUM FREEZE test));
49+
$node->safe_psql('postgres',q(VACUUM(FREEZE, DISABLE_PAGE_SKIPPING) test));
5050
corrupt_first_page('test');
5151
detects_heap_corruption("verify_heapam('test')",
5252
"all-frozen corrupted table");

‎contrib/pageinspect/expected/page.out

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
CREATE EXTENSION pageinspect;
22
CREATE TABLE test1 (a int, b int);
33
INSERT INTO test1 VALUES (16777217, 131584);
4-
VACUUM test1; -- set up FSM
4+
VACUUM(DISABLE_PAGE_SKIPPING)test1; -- set up FSM
55
-- The page contents can vary, so just test that it can be read
66
-- successfully, but don't keep the output.
77
SELECT octet_length(get_raw_page('test1', 'main', 0)) AS main_0;
@@ -87,18 +87,8 @@ SELECT * FROM fsm_page_contents(get_raw_page('test1', 'fsm', 0));
8787
(1 row)
8888

8989
-- If we freeze the only tuple on test1, the infomask should
90-
-- always be the same in all test runs. we show raw flags by
91-
-- default: HEAP_XMIN_COMMITTED and HEAP_XMIN_INVALID.
92-
VACUUM FREEZE test1;
93-
SELECT t_infomask, t_infomask2, raw_flags, combined_flags
94-
FROM heap_page_items(get_raw_page('test1', 0)),
95-
LATERAL heap_tuple_infomask_flags(t_infomask, t_infomask2);
96-
t_infomask | t_infomask2 | raw_flags | combined_flags
97-
------------+-------------+-----------------------------------------------------------+--------------------
98-
2816 | 2 | {HEAP_XMIN_COMMITTED,HEAP_XMIN_INVALID,HEAP_XMAX_INVALID} | {HEAP_XMIN_FROZEN}
99-
(1 row)
100-
101-
-- output the decoded flag HEAP_XMIN_FROZEN instead
90+
-- always be the same in all test runs.
91+
VACUUM (FREEZE, DISABLE_PAGE_SKIPPING) test1;
10292
SELECT t_infomask, t_infomask2, raw_flags, combined_flags
10393
FROM heap_page_items(get_raw_page('test1', 0)),
10494
LATERAL heap_tuple_infomask_flags(t_infomask, t_infomask2);

‎contrib/pageinspect/sql/page.sql

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ CREATE EXTENSION pageinspect;
33
CREATETABLEtest1 (aint, bint);
44
INSERT INTO test1VALUES (16777217,131584);
55

6-
VACUUM test1;-- set up FSM
6+
VACUUM(DISABLE_PAGE_SKIPPING)test1;-- set up FSM
77

88
-- The page contents can vary, so just test that it can be read
99
-- successfully, but don't keep the output.
@@ -34,15 +34,9 @@ SELECT tuple_data_split('test1'::regclass, t_data, t_infomask, t_infomask2, t_bi
3434
SELECT*FROM fsm_page_contents(get_raw_page('test1','fsm',0));
3535

3636
-- If we freeze the only tuple on test1, the infomask should
37-
-- always be the same in all test runs. we show raw flags by
38-
-- default: HEAP_XMIN_COMMITTED and HEAP_XMIN_INVALID.
39-
VACUUM FREEZE test1;
37+
-- always be the same in all test runs.
38+
VACUUM (FREEZE, DISABLE_PAGE_SKIPPING) test1;
4039

41-
SELECT t_infomask, t_infomask2, raw_flags, combined_flags
42-
FROM heap_page_items(get_raw_page('test1',0)),
43-
LATERAL heap_tuple_infomask_flags(t_infomask, t_infomask2);
44-
45-
-- output the decoded flag HEAP_XMIN_FROZEN instead
4640
SELECT t_infomask, t_infomask2, raw_flags, combined_flags
4741
FROM heap_page_items(get_raw_page('test1',0)),
4842
LATERAL heap_tuple_infomask_flags(t_infomask, t_infomask2);

‎contrib/pg_visibility/expected/pg_visibility.out

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ ERROR: "test_foreign_table" is not a table, materialized view, or TOAST table
105105
create table regular_table (a int, b text);
106106
alter table regular_table alter column b set storage external;
107107
insert into regular_table values (1, repeat('one', 1000)), (2, repeat('two', 1000));
108-
vacuum regular_table;
108+
vacuum(disable_page_skipping)regular_table;
109109
select count(*) > 0 from pg_visibility('regular_table');
110110
?column?
111111
----------
@@ -132,7 +132,7 @@ select count(*) > 0 from pg_visibility((select reltoastrelid from pg_class where
132132
(1 row)
133133

134134
create materialized view matview_visibility_test as select * from regular_table;
135-
vacuum matview_visibility_test;
135+
vacuum(disable_page_skipping)matview_visibility_test;
136136
select count(*) > 0 from pg_visibility('matview_visibility_test');
137137
?column?
138138
----------
@@ -149,7 +149,7 @@ select count(*) > 0 from pg_visibility('matview_visibility_test');
149149

150150
-- regular tables which are part of a partition *do* have visibility maps
151151
insert into test_partition values (1);
152-
vacuum test_partition;
152+
vacuum(disable_page_skipping)test_partition;
153153
select count(*) > 0 from pg_visibility('test_partition', 0);
154154
?column?
155155
----------

‎contrib/pg_visibility/sql/pg_visibility.sql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,23 +71,23 @@ select pg_truncate_visibility_map('test_foreign_table');
7171
createtableregular_table (aint, btext);
7272
altertable regular_table alter column bset storage external;
7373
insert into regular_tablevalues (1, repeat('one',1000)), (2, repeat('two',1000));
74-
vacuum regular_table;
74+
vacuum(disable_page_skipping)regular_table;
7575
selectcount(*)>0from pg_visibility('regular_table');
7676
selectcount(*)>0from pg_visibility((select reltoastrelidfrom pg_classwhere relname='regular_table'));
7777
truncate regular_table;
7878
selectcount(*)>0from pg_visibility('regular_table');
7979
selectcount(*)>0from pg_visibility((select reltoastrelidfrom pg_classwhere relname='regular_table'));
8080

8181
create materialized view matview_visibility_testasselect*from regular_table;
82-
vacuum matview_visibility_test;
82+
vacuum(disable_page_skipping)matview_visibility_test;
8383
selectcount(*)>0from pg_visibility('matview_visibility_test');
8484
insert into regular_tablevalues (1), (2);
8585
refresh materialized view matview_visibility_test;
8686
selectcount(*)>0from pg_visibility('matview_visibility_test');
8787

8888
-- regular tables which are part of a partition *do* have visibility maps
8989
insert into test_partitionvalues (1);
90-
vacuum test_partition;
90+
vacuum(disable_page_skipping)test_partition;
9191
selectcount(*)>0from pg_visibility('test_partition',0);
9292
selectcount(*)>0from pg_visibility_map('test_partition');
9393
selectcount(*)>0from pg_visibility_map_summary('test_partition');

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp