2000-01-09 04:48:39 +01:00
|
|
|
--
|
|
|
|
-- BTREE_INDEX
|
|
|
|
-- test retrieval of min/max keys for each index
|
|
|
|
--
|
|
|
|
SELECT b.*
|
1997-04-29 16:23:51 +02:00
|
|
|
FROM bt_i4_heap b
|
|
|
|
WHERE b.seqno < 1;
|
2000-01-09 04:48:39 +01:00
|
|
|
seqno | random
|
|
|
|
-------+------------
|
|
|
|
0 | 1935401906
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT b.*
|
1997-04-29 16:23:51 +02:00
|
|
|
FROM bt_i4_heap b
|
|
|
|
WHERE b.seqno >= 9999;
|
2000-01-09 04:48:39 +01:00
|
|
|
seqno | random
|
|
|
|
-------+------------
|
|
|
|
9999 | 1227676208
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT b.*
|
1997-04-29 16:23:51 +02:00
|
|
|
FROM bt_i4_heap b
|
|
|
|
WHERE b.seqno = 4500;
|
2000-01-09 04:48:39 +01:00
|
|
|
seqno | random
|
|
|
|
-------+------------
|
|
|
|
4500 | 2080851358
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT b.*
|
1998-04-26 06:12:15 +02:00
|
|
|
FROM bt_name_heap b
|
|
|
|
WHERE b.seqno < '1'::name;
|
2000-01-09 04:48:39 +01:00
|
|
|
seqno | random
|
|
|
|
-------+------------
|
|
|
|
0 | 1935401906
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT b.*
|
1998-04-26 06:12:15 +02:00
|
|
|
FROM bt_name_heap b
|
|
|
|
WHERE b.seqno >= '9999'::name;
|
2000-01-09 04:48:39 +01:00
|
|
|
seqno | random
|
|
|
|
-------+------------
|
|
|
|
9999 | 1227676208
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT b.*
|
1998-04-26 06:12:15 +02:00
|
|
|
FROM bt_name_heap b
|
|
|
|
WHERE b.seqno = '4500'::name;
|
2000-01-09 04:48:39 +01:00
|
|
|
seqno | random
|
|
|
|
-------+------------
|
|
|
|
4500 | 2080851358
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT b.*
|
1997-04-29 16:23:51 +02:00
|
|
|
FROM bt_txt_heap b
|
|
|
|
WHERE b.seqno < '1'::text;
|
2000-01-09 04:48:39 +01:00
|
|
|
seqno | random
|
|
|
|
-------+------------
|
|
|
|
0 | 1935401906
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT b.*
|
1997-04-29 16:23:51 +02:00
|
|
|
FROM bt_txt_heap b
|
|
|
|
WHERE b.seqno >= '9999'::text;
|
2000-01-09 04:48:39 +01:00
|
|
|
seqno | random
|
|
|
|
-------+------------
|
|
|
|
9999 | 1227676208
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT b.*
|
1997-04-29 16:23:51 +02:00
|
|
|
FROM bt_txt_heap b
|
|
|
|
WHERE b.seqno = '4500'::text;
|
2000-01-09 04:48:39 +01:00
|
|
|
seqno | random
|
|
|
|
-------+------------
|
|
|
|
4500 | 2080851358
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT b.*
|
1997-04-29 16:23:51 +02:00
|
|
|
FROM bt_f8_heap b
|
|
|
|
WHERE b.seqno < '1'::float8;
|
2000-01-09 04:48:39 +01:00
|
|
|
seqno | random
|
|
|
|
-------+------------
|
|
|
|
0 | 1935401906
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT b.*
|
1997-04-29 16:23:51 +02:00
|
|
|
FROM bt_f8_heap b
|
|
|
|
WHERE b.seqno >= '9999'::float8;
|
2000-01-09 04:48:39 +01:00
|
|
|
seqno | random
|
|
|
|
-------+------------
|
|
|
|
9999 | 1227676208
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-09 04:48:39 +01:00
|
|
|
SELECT b.*
|
1997-04-29 16:23:51 +02:00
|
|
|
FROM bt_f8_heap b
|
|
|
|
WHERE b.seqno = '4500'::float8;
|
2000-01-09 04:48:39 +01:00
|
|
|
seqno | random
|
|
|
|
-------+------------
|
|
|
|
4500 | 2080851358
|
1997-04-29 16:23:51 +02:00
|
|
|
(1 row)
|
|
|
|
|
2008-11-20 20:52:54 +01:00
|
|
|
--
|
|
|
|
-- Check correct optimization of LIKE (special index operator support)
|
|
|
|
-- for both indexscan and bitmapscan cases
|
|
|
|
--
|
|
|
|
set enable_seqscan to false;
|
|
|
|
set enable_indexscan to true;
|
|
|
|
set enable_bitmapscan to false;
|
|
|
|
select proname from pg_proc where proname like E'RI\\_FKey%del' order by 1;
|
|
|
|
proname
|
|
|
|
------------------------
|
|
|
|
RI_FKey_cascade_del
|
|
|
|
RI_FKey_noaction_del
|
|
|
|
RI_FKey_restrict_del
|
|
|
|
RI_FKey_setdefault_del
|
|
|
|
RI_FKey_setnull_del
|
|
|
|
(5 rows)
|
|
|
|
|
|
|
|
set enable_indexscan to false;
|
|
|
|
set enable_bitmapscan to true;
|
|
|
|
select proname from pg_proc where proname like E'RI\\_FKey%del' order by 1;
|
|
|
|
proname
|
|
|
|
------------------------
|
|
|
|
RI_FKey_cascade_del
|
|
|
|
RI_FKey_noaction_del
|
|
|
|
RI_FKey_restrict_del
|
|
|
|
RI_FKey_setdefault_del
|
|
|
|
RI_FKey_setnull_del
|
|
|
|
(5 rows)
|
|
|
|
|
2014-11-19 18:24:58 +01:00
|
|
|
--
|
|
|
|
-- Test B-tree page deletion. In particular, deleting a non-leaf page.
|
|
|
|
--
|
|
|
|
-- First create a tree that's at least four levels deep. The text inserted
|
|
|
|
-- is long and poorly compressible. That way only a few index tuples fit on
|
|
|
|
-- each page, allowing us to get a tall tree with fewer pages.
|
|
|
|
create table btree_tall_tbl(id int4, t text);
|
|
|
|
create index btree_tall_idx on btree_tall_tbl (id, t) with (fillfactor = 10);
|
|
|
|
insert into btree_tall_tbl
|
|
|
|
select g, g::text || '_' ||
|
|
|
|
(select string_agg(md5(i::text), '_') from generate_series(1, 50) i)
|
|
|
|
from generate_series(1, 100) g;
|
|
|
|
-- Delete most entries, and vacuum. This causes page deletions.
|
|
|
|
delete from btree_tall_tbl where id < 950;
|
|
|
|
vacuum btree_tall_tbl;
|
|
|
|
--
|
|
|
|
-- Test B-tree insertion with a metapage update (XLOG_BTREE_INSERT_META
|
|
|
|
-- WAL record type). This happens when a "fast root" page is split.
|
|
|
|
--
|
|
|
|
-- The vacuum above should've turned the leaf page into a fast root. We just
|
|
|
|
-- need to insert some rows to cause the fast root page to split.
|
|
|
|
insert into btree_tall_tbl (id, t)
|
|
|
|
select g, repeat('x', 100) from generate_series(1, 500) g;
|