1
0
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:
Teodor Sigaev
2018-04-05 18:19:10 +03:00
parent 0a64b45152
commit f4cd7102b5
13 changed files with 690 additions and 5 deletions

View 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)

View 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)

View 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)

View 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)