mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-03 01:16:56 +02:00
f8a1c1d5a3
Commit 7f46eaf
added the regression test which checks that
gin_clean_pending_list() cleans up the GIN pending list and returns >0.
This usually works fine. But if autovacuum comes along and cleans
the list before gin_clean_pending_list() starts, the function may
return 0, and then the regression test may fail.
To fix the problem, this commit disables autovacuum on the target
index of gin_clean_pending_list() by setting autovacuum_enabled
reloption to off when creating the table.
Also this commit sets gin_pending_list_limit reloption to 4MB on
the target index. Otherwise when running "make installcheck" with
small gin_pending_list_limit GUC, insertions of data may trigger
the cleanup of pending list before gin_clean_pending_list() starts
and the function may return 0. This could cause the regression test
to fail.
Per buildfarm member spoonbill.
Reported-By: Tom Lane
38 lines
1.5 KiB
Plaintext
38 lines
1.5 KiB
Plaintext
--
|
|
-- Test GIN indexes.
|
|
--
|
|
-- There are other tests to test different GIN opclassed. This is for testing
|
|
-- GIN itself.
|
|
-- Create and populate a test table with a GIN index.
|
|
create table gin_test_tbl(i int4[]) with (autovacuum_enabled = off);
|
|
create index gin_test_idx on gin_test_tbl using gin (i)
|
|
with (fastupdate = on, gin_pending_list_limit = 4096);
|
|
insert into gin_test_tbl select array[1, 2, g] from generate_series(1, 20000) g;
|
|
insert into gin_test_tbl select array[1, 3, g] from generate_series(1, 1000) g;
|
|
select gin_clean_pending_list('gin_test_idx')>10 as many; -- flush the fastupdate buffers
|
|
many
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
insert into gin_test_tbl select array[3, 1, g] from generate_series(1, 1000) g;
|
|
vacuum gin_test_tbl; -- flush the fastupdate buffers
|
|
select gin_clean_pending_list('gin_test_idx'); -- nothing to flush
|
|
gin_clean_pending_list
|
|
------------------------
|
|
0
|
|
(1 row)
|
|
|
|
-- Test vacuuming
|
|
delete from gin_test_tbl where i @> array[2];
|
|
vacuum gin_test_tbl;
|
|
-- Disable fastupdate, and do more insertions. With fastupdate enabled, most
|
|
-- insertions (by flushing the list pages) cause page splits. Without
|
|
-- fastupdate, we get more churn in the GIN data leaf pages, and exercise the
|
|
-- recompression codepaths.
|
|
alter index gin_test_idx set (fastupdate = off);
|
|
insert into gin_test_tbl select array[1, 2, g] from generate_series(1, 1000) g;
|
|
insert into gin_test_tbl select array[1, 3, g] from generate_series(1, 1000) g;
|
|
delete from gin_test_tbl where i @> array[2];
|
|
vacuum gin_test_tbl;
|