openGauss-server/src/test/regress/sql/gin_test_2.sql

75 lines
3.5 KiB
SQL

--
-- 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.
drop table if exists gin_test_tbl;
create table gin_test_tbl(id int, i int4[]);
create index gin_test_idx on gin_test_tbl using gin (i) with (fastupdate = on);
insert into gin_test_tbl select g, array[1, 2, g] from generate_series(1, 20000) g;
insert into gin_test_tbl select g, array[1, 3, g] from generate_series(1, 1000) g;
vacuum gin_test_tbl; -- flush the fastupdate buffers
-- 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 g, array[1, g % 2, g] from generate_series(1, 10000) g;
insert into gin_test_tbl select g, array[1, g % 3, g] from generate_series(1, 10000) g;
delete from gin_test_tbl where i @> array[2];
vacuum gin_test_tbl;
drop table gin_test_tbl;
-- create table
DROP TABLE IF EXISTS test_gin_1;
CREATE TABLE test_gin_1(id int, info1 int[], info2 text[], info3 date[]);
INSERT INTO test_gin_1 VALUES (1, '{1,2,3}', '{abc, cbd, bcd, defg}', '{2010-01-01, 2011-01-01, 2012-01-01}');
INSERT INTO test_gin_1 VALUES (2, '{2,3,4}', '{abd, cbd, bcd, ccd}', '{2001-01-01,2002-01-01,2003-01-01}');
INSERT INTO test_gin_1 VALUES (3,'{3,4,5}','{bcd,def,ccf}','{2013-01-01}');
INSERT INTO test_gin_1 VALUES (4,'{4,5,6}','{aaa,bbb,ccc}','{2011-01-01,2012-01-02,2013-01-03}');
ANALYZE test_gin_1;
-- create index
CREATE INDEX test_gin_1_info1_idx ON test_gin_1 USING gin(info1);
CREATE INDEX test_gin_1_info2_idx ON test_gin_1 USING gin(info2);
CREATE INDEX test_gin_1_info3_idx ON test_gin_1 USING gin(info3);
-- set bitmap plan
SET enable_seqscan=off;
-- select query
SELECT * FROM test_gin_1 WHERE info1 @> '{1}'::int[] ORDER BY id, info1, info2, info3;
SELECT * FROM test_gin_1 WHERE info1 && '{1}'::int[] ORDER BY id, info1, info2, info3;
SELECT * FROM test_gin_1 WHERE info2 @> '{abc}'::text[] ORDER BY id, info1, info2, info3;
SELECT * FROM test_gin_1 WHERE info2 && '{abc}'::text[] ORDER BY id, info1, info2, info3;
SELECT * FROM test_gin_1 WHERE info3 @> '{2011-01-01}'::date[] ORDER BY id, info1, info2, info3;
SELECT * FROM test_gin_1 WHERE info3 && '{2011-01-01}'::date[] ORDER BY id, info1, info2, info3;
-- insert data and update index
INSERT INTO test_gin_1 VALUES (1, '{1,2,3}', '{abc, cbd, bcd, defg}', '{2010-01-01, 2011-01-01, 2012-01-01}');
INSERT INTO test_gin_1 VALUES (2, '{2,3,4}', '{abd, cbd, bcd, ccd}', '{2001-01-01,2002-01-01,2003-01-01}');
INSERT INTO test_gin_1 VALUES (3,'{3,4,5}','{bcd,def,ccf}','{2013-01-01}');
INSERT INTO test_gin_1 VALUES (4,'{4,5,6}','{aaa,bbb,ccc}','{2011-01-01,2012-01-02,2013-01-03}');
-- select query
SELECT * FROM test_gin_1 WHERE info1 @> '{1}'::int[] ORDER BY id, info1, info2, info3;
SELECT * FROM test_gin_1 WHERE info2 @> '{abc}'::text[] ORDER BY id, info1, info2, info3;
SELECT * FROM test_gin_1 WHERE info3 @> '{2011-01-01}'::date[] ORDER BY id, info1, info2, info3;
DROP TABLE test_gin_1;
create unlogged table gin_unlogged_tbl(id int, info int[]) ;
create index gin_unlogged_idx on gin_unlogged_tbl using gin(info);
checkpoint;
drop table gin_unlogged_tbl;
RESET ENABLE_SEQSCAN;
RESET ENABLE_INDEXSCAN;
RESET ENABLE_BITMAPSCAN;