mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
Add support of bool, bpchar, name and uuid to btree_gin
Mostly for completeness, but I believe there are cases to use that in multicolumn GIN indexes. Bump btree_gin module version Author: Matheus Oliveira Reviewed by: Tomas Vondra Discussion: https://www.postgresql.org/message-id/flat/CAJghg4LMJf6Z13fnZD-MBNiGxzd0cA2=F3TDjNkX3eQH58hktQ@mail.gmail.com
This commit is contained in:
119
contrib/btree_gin/expected/bool.out
Normal file
119
contrib/btree_gin/expected/bool.out
Normal file
@ -0,0 +1,119 @@
|
||||
set enable_seqscan=off;
|
||||
CREATE TABLE test_bool (
|
||||
i boolean
|
||||
);
|
||||
INSERT INTO test_bool VALUES (false),(true),(null);
|
||||
CREATE INDEX idx_bool ON test_bool USING gin (i);
|
||||
SELECT * FROM test_bool WHERE i<true ORDER BY i;
|
||||
i
|
||||
---
|
||||
f
|
||||
(1 row)
|
||||
|
||||
SELECT * FROM test_bool WHERE i<=true ORDER BY i;
|
||||
i
|
||||
---
|
||||
f
|
||||
t
|
||||
(2 rows)
|
||||
|
||||
SELECT * FROM test_bool WHERE i=true ORDER BY i;
|
||||
i
|
||||
---
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT * FROM test_bool WHERE i>=true ORDER BY i;
|
||||
i
|
||||
---
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT * FROM test_bool WHERE i>true ORDER BY i;
|
||||
i
|
||||
---
|
||||
(0 rows)
|
||||
|
||||
SELECT * FROM test_bool WHERE i<false ORDER BY i;
|
||||
i
|
||||
---
|
||||
(0 rows)
|
||||
|
||||
SELECT * FROM test_bool WHERE i<=false ORDER BY i;
|
||||
i
|
||||
---
|
||||
f
|
||||
(1 row)
|
||||
|
||||
SELECT * FROM test_bool WHERE i=false ORDER BY i;
|
||||
i
|
||||
---
|
||||
f
|
||||
(1 row)
|
||||
|
||||
SELECT * FROM test_bool WHERE i>=false ORDER BY i;
|
||||
i
|
||||
---
|
||||
f
|
||||
t
|
||||
(2 rows)
|
||||
|
||||
SELECT * FROM test_bool WHERE i>false ORDER BY i;
|
||||
i
|
||||
---
|
||||
t
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM test_bool WHERE i<true ORDER BY i;
|
||||
QUERY PLAN
|
||||
-------------------------------------------
|
||||
Sort
|
||||
Sort Key: i
|
||||
-> Bitmap Heap Scan on test_bool
|
||||
Recheck Cond: (i < true)
|
||||
-> Bitmap Index Scan on idx_bool
|
||||
Index Cond: (i < true)
|
||||
(6 rows)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM test_bool WHERE i<=true ORDER BY i;
|
||||
QUERY PLAN
|
||||
-------------------------------------------
|
||||
Sort
|
||||
Sort Key: i
|
||||
-> Bitmap Heap Scan on test_bool
|
||||
Recheck Cond: (i <= true)
|
||||
-> Bitmap Index Scan on idx_bool
|
||||
Index Cond: (i <= true)
|
||||
(6 rows)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM test_bool WHERE i=true ORDER BY i;
|
||||
QUERY PLAN
|
||||
-----------------------------
|
||||
Sort
|
||||
Sort Key: i
|
||||
-> Seq Scan on test_bool
|
||||
Filter: i
|
||||
(4 rows)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM test_bool WHERE i>=true ORDER BY i;
|
||||
QUERY PLAN
|
||||
-------------------------------------------
|
||||
Sort
|
||||
Sort Key: i
|
||||
-> Bitmap Heap Scan on test_bool
|
||||
Recheck Cond: (i >= true)
|
||||
-> Bitmap Index Scan on idx_bool
|
||||
Index Cond: (i >= true)
|
||||
(6 rows)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM test_bool WHERE i>true ORDER BY i;
|
||||
QUERY PLAN
|
||||
-------------------------------------------
|
||||
Sort
|
||||
Sort Key: i
|
||||
-> Bitmap Heap Scan on test_bool
|
||||
Recheck Cond: (i > true)
|
||||
-> Bitmap Index Scan on idx_bool
|
||||
Index Cond: (i > true)
|
||||
(6 rows)
|
||||
|
109
contrib/btree_gin/expected/bpchar.out
Normal file
109
contrib/btree_gin/expected/bpchar.out
Normal file
@ -0,0 +1,109 @@
|
||||
set enable_seqscan=off;
|
||||
CREATE TABLE test_bpchar (
|
||||
i char(10)
|
||||
);
|
||||
INSERT INTO test_bpchar VALUES ('a'),('ab'),('abc'),('abc '),('abb'),('axy'),('xyz'),('xyz ');
|
||||
CREATE INDEX idx_bpchar ON test_bpchar USING gin (i);
|
||||
SELECT * FROM test_bpchar WHERE i<'abc' ORDER BY i;
|
||||
i
|
||||
------------
|
||||
a
|
||||
ab
|
||||
abb
|
||||
(3 rows)
|
||||
|
||||
SELECT * FROM test_bpchar WHERE i<='abc' ORDER BY i;
|
||||
i
|
||||
------------
|
||||
a
|
||||
ab
|
||||
abb
|
||||
abc
|
||||
abc
|
||||
(5 rows)
|
||||
|
||||
SELECT * FROM test_bpchar WHERE i='abc' ORDER BY i;
|
||||
i
|
||||
------------
|
||||
abc
|
||||
abc
|
||||
(2 rows)
|
||||
|
||||
SELECT * FROM test_bpchar WHERE i='abc ' ORDER BY i;
|
||||
i
|
||||
------------
|
||||
abc
|
||||
abc
|
||||
(2 rows)
|
||||
|
||||
SELECT * FROM test_bpchar WHERE i>='abc' ORDER BY i;
|
||||
i
|
||||
------------
|
||||
abc
|
||||
abc
|
||||
axy
|
||||
xyz
|
||||
xyz
|
||||
(5 rows)
|
||||
|
||||
SELECT * FROM test_bpchar WHERE i>'abc' ORDER BY i;
|
||||
i
|
||||
------------
|
||||
axy
|
||||
xyz
|
||||
xyz
|
||||
(3 rows)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM test_bpchar WHERE i<'abc' ORDER BY i;
|
||||
QUERY PLAN
|
||||
-----------------------------------------------
|
||||
Sort
|
||||
Sort Key: i
|
||||
-> Bitmap Heap Scan on test_bpchar
|
||||
Recheck Cond: (i < 'abc'::bpchar)
|
||||
-> Bitmap Index Scan on idx_bpchar
|
||||
Index Cond: (i < 'abc'::bpchar)
|
||||
(6 rows)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM test_bpchar WHERE i<='abc' ORDER BY i;
|
||||
QUERY PLAN
|
||||
------------------------------------------------
|
||||
Sort
|
||||
Sort Key: i
|
||||
-> Bitmap Heap Scan on test_bpchar
|
||||
Recheck Cond: (i <= 'abc'::bpchar)
|
||||
-> Bitmap Index Scan on idx_bpchar
|
||||
Index Cond: (i <= 'abc'::bpchar)
|
||||
(6 rows)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM test_bpchar WHERE i='abc' ORDER BY i;
|
||||
QUERY PLAN
|
||||
-----------------------------------------
|
||||
Bitmap Heap Scan on test_bpchar
|
||||
Recheck Cond: (i = 'abc'::bpchar)
|
||||
-> Bitmap Index Scan on idx_bpchar
|
||||
Index Cond: (i = 'abc'::bpchar)
|
||||
(4 rows)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM test_bpchar WHERE i>='abc' ORDER BY i;
|
||||
QUERY PLAN
|
||||
------------------------------------------------
|
||||
Sort
|
||||
Sort Key: i
|
||||
-> Bitmap Heap Scan on test_bpchar
|
||||
Recheck Cond: (i >= 'abc'::bpchar)
|
||||
-> Bitmap Index Scan on idx_bpchar
|
||||
Index Cond: (i >= 'abc'::bpchar)
|
||||
(6 rows)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM test_bpchar WHERE i>'abc' ORDER BY i;
|
||||
QUERY PLAN
|
||||
-----------------------------------------------
|
||||
Sort
|
||||
Sort Key: i
|
||||
-> Bitmap Heap Scan on test_bpchar
|
||||
Recheck Cond: (i > 'abc'::bpchar)
|
||||
-> Bitmap Index Scan on idx_bpchar
|
||||
Index Cond: (i > 'abc'::bpchar)
|
||||
(6 rows)
|
||||
|
97
contrib/btree_gin/expected/name.out
Normal file
97
contrib/btree_gin/expected/name.out
Normal file
@ -0,0 +1,97 @@
|
||||
set enable_seqscan=off;
|
||||
CREATE TABLE test_name (
|
||||
i name
|
||||
);
|
||||
INSERT INTO test_name VALUES ('a'),('ab'),('abc'),('abb'),('axy'),('xyz');
|
||||
CREATE INDEX idx_name ON test_name USING gin (i);
|
||||
SELECT * FROM test_name WHERE i<'abc' ORDER BY i;
|
||||
i
|
||||
-----
|
||||
a
|
||||
ab
|
||||
abb
|
||||
(3 rows)
|
||||
|
||||
SELECT * FROM test_name WHERE i<='abc' ORDER BY i;
|
||||
i
|
||||
-----
|
||||
a
|
||||
ab
|
||||
abb
|
||||
abc
|
||||
(4 rows)
|
||||
|
||||
SELECT * FROM test_name WHERE i='abc' ORDER BY i;
|
||||
i
|
||||
-----
|
||||
abc
|
||||
(1 row)
|
||||
|
||||
SELECT * FROM test_name WHERE i>='abc' ORDER BY i;
|
||||
i
|
||||
-----
|
||||
abc
|
||||
axy
|
||||
xyz
|
||||
(3 rows)
|
||||
|
||||
SELECT * FROM test_name WHERE i>'abc' ORDER BY i;
|
||||
i
|
||||
-----
|
||||
axy
|
||||
xyz
|
||||
(2 rows)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM test_name WHERE i<'abc' ORDER BY i;
|
||||
QUERY PLAN
|
||||
---------------------------------------------
|
||||
Sort
|
||||
Sort Key: i
|
||||
-> Bitmap Heap Scan on test_name
|
||||
Recheck Cond: (i < 'abc'::name)
|
||||
-> Bitmap Index Scan on idx_name
|
||||
Index Cond: (i < 'abc'::name)
|
||||
(6 rows)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM test_name WHERE i<='abc' ORDER BY i;
|
||||
QUERY PLAN
|
||||
----------------------------------------------
|
||||
Sort
|
||||
Sort Key: i
|
||||
-> Bitmap Heap Scan on test_name
|
||||
Recheck Cond: (i <= 'abc'::name)
|
||||
-> Bitmap Index Scan on idx_name
|
||||
Index Cond: (i <= 'abc'::name)
|
||||
(6 rows)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM test_name WHERE i='abc' ORDER BY i;
|
||||
QUERY PLAN
|
||||
---------------------------------------
|
||||
Bitmap Heap Scan on test_name
|
||||
Recheck Cond: (i = 'abc'::name)
|
||||
-> Bitmap Index Scan on idx_name
|
||||
Index Cond: (i = 'abc'::name)
|
||||
(4 rows)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM test_name WHERE i>='abc' ORDER BY i;
|
||||
QUERY PLAN
|
||||
----------------------------------------------
|
||||
Sort
|
||||
Sort Key: i
|
||||
-> Bitmap Heap Scan on test_name
|
||||
Recheck Cond: (i >= 'abc'::name)
|
||||
-> Bitmap Index Scan on idx_name
|
||||
Index Cond: (i >= 'abc'::name)
|
||||
(6 rows)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM test_name WHERE i>'abc' ORDER BY i;
|
||||
QUERY PLAN
|
||||
---------------------------------------------
|
||||
Sort
|
||||
Sort Key: i
|
||||
-> Bitmap Heap Scan on test_name
|
||||
Recheck Cond: (i > 'abc'::name)
|
||||
-> Bitmap Index Scan on idx_name
|
||||
Index Cond: (i > 'abc'::name)
|
||||
(6 rows)
|
||||
|
104
contrib/btree_gin/expected/uuid.out
Normal file
104
contrib/btree_gin/expected/uuid.out
Normal file
@ -0,0 +1,104 @@
|
||||
set enable_seqscan=off;
|
||||
CREATE TABLE test_uuid (
|
||||
i uuid
|
||||
);
|
||||
INSERT INTO test_uuid VALUES
|
||||
( '00000000-0000-0000-0000-000000000000' ),
|
||||
( '299bc99f-2f79-4e3e-bfea-2cbfd62a7c27' ),
|
||||
( '6264af33-0d43-4337-bf4e-43509b8a4be8' ),
|
||||
( 'ce41c936-6acb-4feb-8c91-852a673e5a5c' ),
|
||||
( 'd2ce731f-f2a8-4a2b-be37-8f0ba637427f' ),
|
||||
( 'ffffffff-ffff-ffff-ffff-ffffffffffff' )
|
||||
;
|
||||
CREATE INDEX idx_uuid ON test_uuid USING gin (i);
|
||||
SELECT * FROM test_uuid WHERE i<'ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid ORDER BY i;
|
||||
i
|
||||
--------------------------------------
|
||||
00000000-0000-0000-0000-000000000000
|
||||
299bc99f-2f79-4e3e-bfea-2cbfd62a7c27
|
||||
6264af33-0d43-4337-bf4e-43509b8a4be8
|
||||
(3 rows)
|
||||
|
||||
SELECT * FROM test_uuid WHERE i<='ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid ORDER BY i;
|
||||
i
|
||||
--------------------------------------
|
||||
00000000-0000-0000-0000-000000000000
|
||||
299bc99f-2f79-4e3e-bfea-2cbfd62a7c27
|
||||
6264af33-0d43-4337-bf4e-43509b8a4be8
|
||||
ce41c936-6acb-4feb-8c91-852a673e5a5c
|
||||
(4 rows)
|
||||
|
||||
SELECT * FROM test_uuid WHERE i='ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid ORDER BY i;
|
||||
i
|
||||
--------------------------------------
|
||||
ce41c936-6acb-4feb-8c91-852a673e5a5c
|
||||
(1 row)
|
||||
|
||||
SELECT * FROM test_uuid WHERE i>='ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid ORDER BY i;
|
||||
i
|
||||
--------------------------------------
|
||||
ce41c936-6acb-4feb-8c91-852a673e5a5c
|
||||
d2ce731f-f2a8-4a2b-be37-8f0ba637427f
|
||||
ffffffff-ffff-ffff-ffff-ffffffffffff
|
||||
(3 rows)
|
||||
|
||||
SELECT * FROM test_uuid WHERE i>'ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid ORDER BY i;
|
||||
i
|
||||
--------------------------------------
|
||||
d2ce731f-f2a8-4a2b-be37-8f0ba637427f
|
||||
ffffffff-ffff-ffff-ffff-ffffffffffff
|
||||
(2 rows)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM test_uuid WHERE i<'ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid ORDER BY i;
|
||||
QUERY PLAN
|
||||
------------------------------------------------------------------------------
|
||||
Sort
|
||||
Sort Key: i
|
||||
-> Bitmap Heap Scan on test_uuid
|
||||
Recheck Cond: (i < 'ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid)
|
||||
-> Bitmap Index Scan on idx_uuid
|
||||
Index Cond: (i < 'ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid)
|
||||
(6 rows)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM test_uuid WHERE i<='ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid ORDER BY i;
|
||||
QUERY PLAN
|
||||
-------------------------------------------------------------------------------
|
||||
Sort
|
||||
Sort Key: i
|
||||
-> Bitmap Heap Scan on test_uuid
|
||||
Recheck Cond: (i <= 'ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid)
|
||||
-> Bitmap Index Scan on idx_uuid
|
||||
Index Cond: (i <= 'ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid)
|
||||
(6 rows)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM test_uuid WHERE i='ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid ORDER BY i;
|
||||
QUERY PLAN
|
||||
------------------------------------------------------------------------
|
||||
Bitmap Heap Scan on test_uuid
|
||||
Recheck Cond: (i = 'ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid)
|
||||
-> Bitmap Index Scan on idx_uuid
|
||||
Index Cond: (i = 'ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid)
|
||||
(4 rows)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM test_uuid WHERE i>='ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid ORDER BY i;
|
||||
QUERY PLAN
|
||||
-------------------------------------------------------------------------------
|
||||
Sort
|
||||
Sort Key: i
|
||||
-> Bitmap Heap Scan on test_uuid
|
||||
Recheck Cond: (i >= 'ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid)
|
||||
-> Bitmap Index Scan on idx_uuid
|
||||
Index Cond: (i >= 'ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid)
|
||||
(6 rows)
|
||||
|
||||
EXPLAIN (COSTS OFF) SELECT * FROM test_uuid WHERE i>'ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid ORDER BY i;
|
||||
QUERY PLAN
|
||||
------------------------------------------------------------------------------
|
||||
Sort
|
||||
Sort Key: i
|
||||
-> Bitmap Heap Scan on test_uuid
|
||||
Recheck Cond: (i > 'ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid)
|
||||
-> Bitmap Index Scan on idx_uuid
|
||||
Index Cond: (i > 'ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid)
|
||||
(6 rows)
|
||||
|
Reference in New Issue
Block a user