diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2014-11-19 19:24:58 +0200 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2014-11-19 19:47:43 +0200 |
commit | 88fc71926392115cdc3672807f3903ce43d0ebcf (patch) | |
tree | 2a564c08d415a18586ccf579989e0fdc45e617d8 /src/test/regress/sql/spgist.sql | |
parent | a0165553619107f990cb7872f4a9573598319581 (diff) | |
download | postgresql-88fc71926392115cdc3672807f3903ce43d0ebcf.tar.gz postgresql-88fc71926392115cdc3672807f3903ce43d0ebcf.zip |
Add test cases for indexam operations not currently covered.
That includes VACUUM on GIN, GiST and SP-GiST indexes, and B-tree indexes
large enough to cause page deletions in B-tree. Plus some other special
cases.
After this patch, the regression tests generate all different WAL record
types. Not all branches within the redo functions are covered, but it's a
step forward.
Diffstat (limited to 'src/test/regress/sql/spgist.sql')
-rw-r--r-- | src/test/regress/sql/spgist.sql | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/test/regress/sql/spgist.sql b/src/test/regress/sql/spgist.sql new file mode 100644 index 00000000000..5896b50865c --- /dev/null +++ b/src/test/regress/sql/spgist.sql @@ -0,0 +1,50 @@ +-- +-- Test SP-GiST indexes. +-- +-- There are other tests to test different SP-GiST opclasses. This is for +-- testing SP-GiST code itself. + +create table spgist_point_tbl(id int4, p point); +create index spgist_point_idx on spgist_point_tbl using spgist(p); + +-- Test vacuum-root operation. It gets invoked when the root is also a leaf, +-- i.e. the index is very small. +insert into spgist_point_tbl (id, p) +select g, point(g*10, g*10) from generate_series(1, 10) g; +delete from spgist_point_tbl where id < 5; +vacuum spgist_point_tbl; + +-- Insert more data, to make the index a few levels deep. +insert into spgist_point_tbl (id, p) +select g, point(g*10, g*10) from generate_series(1, 10000) g; +insert into spgist_point_tbl (id, p) +select g+100000, point(g*10+1, g*10+1) from generate_series(1, 10000) g; + +-- To test vacuum, delete some entries from all over the index. +delete from spgist_point_tbl where id % 2 = 1; + +-- And also delete some concentration of values. (SP-GiST doesn't currently +-- attempt to delete pages even when they become empty, but if it did, this +-- would exercise it) +delete from spgist_point_tbl where id < 10000; + +vacuum spgist_point_tbl; + + +-- The point opclass's choose method only uses the spgMatchNode action, +-- so the other actions are not tested by the above. Create an index using +-- text opclass, which uses the others actions. + +create table spgist_text_tbl(id int4, t text); +create index spgist_text_idx on spgist_text_tbl using spgist(t); + +insert into spgist_text_tbl (id, t) +select g, 'f' || repeat('o', 100) || g from generate_series(1, 10000) g +union all +select g, 'baaaaaaaaaaaaaar' || g from generate_series(1, 1000) g; + +-- Do a lot of insertions that have to split an existing node. Hopefully +-- one of these will cause the page to run out of space, causing the inner +-- tuple to be moved to another page. +insert into spgist_text_tbl (id, t) +select -g, 'f' || repeat('o', 100-g) || 'surprise' from generate_series(1, 100) g; |