mirror of
https://github.com/postgres/postgres.git
synced 2025-04-21 12:05: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:
parent
0a64b45152
commit
f4cd7102b5
@ -5,13 +5,13 @@ OBJS = btree_gin.o $(WIN32RES)
|
|||||||
|
|
||||||
EXTENSION = btree_gin
|
EXTENSION = btree_gin
|
||||||
DATA = btree_gin--1.0.sql btree_gin--1.0--1.1.sql btree_gin--1.1--1.2.sql \
|
DATA = btree_gin--1.0.sql btree_gin--1.0--1.1.sql btree_gin--1.1--1.2.sql \
|
||||||
btree_gin--unpackaged--1.0.sql
|
btree_gin--1.2--1.3.sql btree_gin--unpackaged--1.0.sql
|
||||||
PGFILEDESC = "btree_gin - B-tree equivalent GIN operator classes"
|
PGFILEDESC = "btree_gin - B-tree equivalent GIN operator classes"
|
||||||
|
|
||||||
REGRESS = install_btree_gin int2 int4 int8 float4 float8 money oid \
|
REGRESS = install_btree_gin int2 int4 int8 float4 float8 money oid \
|
||||||
timestamp timestamptz time timetz date interval \
|
timestamp timestamptz time timetz date interval \
|
||||||
macaddr macaddr8 inet cidr text varchar char bytea bit varbit \
|
macaddr macaddr8 inet cidr text varchar char bytea bit varbit \
|
||||||
numeric enum
|
numeric enum uuid name bool bpchar
|
||||||
|
|
||||||
ifdef USE_PGXS
|
ifdef USE_PGXS
|
||||||
PG_CONFIG = pg_config
|
PG_CONFIG = pg_config
|
||||||
|
128
contrib/btree_gin/btree_gin--1.2--1.3.sql
Normal file
128
contrib/btree_gin/btree_gin--1.2--1.3.sql
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
/* contrib/btree_gin/btree_gin--1.2--1.3.sql */
|
||||||
|
|
||||||
|
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
|
||||||
|
\echo Use "ALTER EXTENSION btree_gin UPDATE TO '1.3'" to load this file. \quit
|
||||||
|
|
||||||
|
-- uuid datatype support new in 1.3.
|
||||||
|
CREATE FUNCTION gin_extract_value_uuid(uuid, internal)
|
||||||
|
RETURNS internal
|
||||||
|
AS 'MODULE_PATHNAME'
|
||||||
|
LANGUAGE C STRICT IMMUTABLE;
|
||||||
|
|
||||||
|
CREATE FUNCTION gin_compare_prefix_uuid(uuid, uuid, int2, internal)
|
||||||
|
RETURNS int4
|
||||||
|
AS 'MODULE_PATHNAME'
|
||||||
|
LANGUAGE C STRICT IMMUTABLE;
|
||||||
|
|
||||||
|
CREATE FUNCTION gin_extract_query_uuid(uuid, internal, int2, internal, internal)
|
||||||
|
RETURNS internal
|
||||||
|
AS 'MODULE_PATHNAME'
|
||||||
|
LANGUAGE C STRICT IMMUTABLE;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS uuid_ops
|
||||||
|
DEFAULT FOR TYPE uuid USING gin
|
||||||
|
AS
|
||||||
|
OPERATOR 1 <,
|
||||||
|
OPERATOR 2 <=,
|
||||||
|
OPERATOR 3 =,
|
||||||
|
OPERATOR 4 >=,
|
||||||
|
OPERATOR 5 >,
|
||||||
|
FUNCTION 1 uuid_cmp(uuid,uuid),
|
||||||
|
FUNCTION 2 gin_extract_value_uuid(uuid, internal),
|
||||||
|
FUNCTION 3 gin_extract_query_uuid(uuid, internal, int2, internal, internal),
|
||||||
|
FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal),
|
||||||
|
FUNCTION 5 gin_compare_prefix_uuid(uuid,uuid,int2, internal),
|
||||||
|
STORAGE uuid;
|
||||||
|
|
||||||
|
-- name datatype support new in 1.3.
|
||||||
|
CREATE FUNCTION gin_extract_value_name(name, internal)
|
||||||
|
RETURNS internal
|
||||||
|
AS 'MODULE_PATHNAME'
|
||||||
|
LANGUAGE C STRICT IMMUTABLE;
|
||||||
|
|
||||||
|
CREATE FUNCTION gin_compare_prefix_name(name, name, int2, internal)
|
||||||
|
RETURNS int4
|
||||||
|
AS 'MODULE_PATHNAME'
|
||||||
|
LANGUAGE C STRICT IMMUTABLE;
|
||||||
|
|
||||||
|
CREATE FUNCTION gin_extract_query_name(name, internal, int2, internal, internal)
|
||||||
|
RETURNS internal
|
||||||
|
AS 'MODULE_PATHNAME'
|
||||||
|
LANGUAGE C STRICT IMMUTABLE;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS name_ops
|
||||||
|
DEFAULT FOR TYPE name USING gin
|
||||||
|
AS
|
||||||
|
OPERATOR 1 <,
|
||||||
|
OPERATOR 2 <=,
|
||||||
|
OPERATOR 3 =,
|
||||||
|
OPERATOR 4 >=,
|
||||||
|
OPERATOR 5 >,
|
||||||
|
FUNCTION 1 btnamecmp(name,name),
|
||||||
|
FUNCTION 2 gin_extract_value_name(name, internal),
|
||||||
|
FUNCTION 3 gin_extract_query_name(name, internal, int2, internal, internal),
|
||||||
|
FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal),
|
||||||
|
FUNCTION 5 gin_compare_prefix_name(name,name,int2, internal),
|
||||||
|
STORAGE name;
|
||||||
|
|
||||||
|
-- bool datatype support new in 1.3.
|
||||||
|
CREATE FUNCTION gin_extract_value_bool(bool, internal)
|
||||||
|
RETURNS internal
|
||||||
|
AS 'MODULE_PATHNAME'
|
||||||
|
LANGUAGE C STRICT IMMUTABLE;
|
||||||
|
|
||||||
|
CREATE FUNCTION gin_compare_prefix_bool(bool, bool, int2, internal)
|
||||||
|
RETURNS int4
|
||||||
|
AS 'MODULE_PATHNAME'
|
||||||
|
LANGUAGE C STRICT IMMUTABLE;
|
||||||
|
|
||||||
|
CREATE FUNCTION gin_extract_query_bool(bool, internal, int2, internal, internal)
|
||||||
|
RETURNS internal
|
||||||
|
AS 'MODULE_PATHNAME'
|
||||||
|
LANGUAGE C STRICT IMMUTABLE;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS bool_ops
|
||||||
|
DEFAULT FOR TYPE bool USING gin
|
||||||
|
AS
|
||||||
|
OPERATOR 1 <,
|
||||||
|
OPERATOR 2 <=,
|
||||||
|
OPERATOR 3 =,
|
||||||
|
OPERATOR 4 >=,
|
||||||
|
OPERATOR 5 >,
|
||||||
|
FUNCTION 1 btboolcmp(bool,bool),
|
||||||
|
FUNCTION 2 gin_extract_value_bool(bool, internal),
|
||||||
|
FUNCTION 3 gin_extract_query_bool(bool, internal, int2, internal, internal),
|
||||||
|
FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal),
|
||||||
|
FUNCTION 5 gin_compare_prefix_bool(bool,bool,int2, internal),
|
||||||
|
STORAGE bool;
|
||||||
|
|
||||||
|
-- bpchar datatype support new in 1.3.
|
||||||
|
CREATE FUNCTION gin_extract_value_bpchar(bpchar, internal)
|
||||||
|
RETURNS internal
|
||||||
|
AS 'MODULE_PATHNAME'
|
||||||
|
LANGUAGE C STRICT IMMUTABLE;
|
||||||
|
|
||||||
|
CREATE FUNCTION gin_compare_prefix_bpchar(bpchar, bpchar, int2, internal)
|
||||||
|
RETURNS int4
|
||||||
|
AS 'MODULE_PATHNAME'
|
||||||
|
LANGUAGE C STRICT IMMUTABLE;
|
||||||
|
|
||||||
|
CREATE FUNCTION gin_extract_query_bpchar(bpchar, internal, int2, internal, internal)
|
||||||
|
RETURNS internal
|
||||||
|
AS 'MODULE_PATHNAME'
|
||||||
|
LANGUAGE C STRICT IMMUTABLE;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS bpchar_ops
|
||||||
|
DEFAULT FOR TYPE bpchar USING gin
|
||||||
|
AS
|
||||||
|
OPERATOR 1 <,
|
||||||
|
OPERATOR 2 <=,
|
||||||
|
OPERATOR 3 =,
|
||||||
|
OPERATOR 4 >=,
|
||||||
|
OPERATOR 5 >,
|
||||||
|
FUNCTION 1 bpcharcmp(bpchar, bpchar),
|
||||||
|
FUNCTION 2 gin_extract_value_bpchar(bpchar, internal),
|
||||||
|
FUNCTION 3 gin_extract_query_bpchar(bpchar, internal, int2, internal, internal),
|
||||||
|
FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal),
|
||||||
|
FUNCTION 5 gin_compare_prefix_bpchar(bpchar,bpchar,int2, internal),
|
||||||
|
STORAGE bpchar;
|
@ -14,6 +14,7 @@
|
|||||||
#include "utils/numeric.h"
|
#include "utils/numeric.h"
|
||||||
#include "utils/timestamp.h"
|
#include "utils/timestamp.h"
|
||||||
#include "utils/varbit.h"
|
#include "utils/varbit.h"
|
||||||
|
#include "utils/uuid.h"
|
||||||
|
|
||||||
PG_MODULE_MAGIC;
|
PG_MODULE_MAGIC;
|
||||||
|
|
||||||
@ -350,6 +351,8 @@ leftmostvalue_text(void)
|
|||||||
|
|
||||||
GIN_SUPPORT(text, true, leftmostvalue_text, bttextcmp)
|
GIN_SUPPORT(text, true, leftmostvalue_text, bttextcmp)
|
||||||
|
|
||||||
|
GIN_SUPPORT(bpchar, true, leftmostvalue_text, bpcharcmp)
|
||||||
|
|
||||||
static Datum
|
static Datum
|
||||||
leftmostvalue_char(void)
|
leftmostvalue_char(void)
|
||||||
{
|
{
|
||||||
@ -437,7 +440,6 @@ GIN_SUPPORT(numeric, true, leftmostvalue_numeric, gin_numeric_cmp)
|
|||||||
* routines it needs it, so we can't use DirectFunctionCall2.
|
* routines it needs it, so we can't use DirectFunctionCall2.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#define ENUM_IS_LEFTMOST(x) ((x) == InvalidOid)
|
#define ENUM_IS_LEFTMOST(x) ((x) == InvalidOid)
|
||||||
|
|
||||||
PG_FUNCTION_INFO_V1(gin_enum_cmp);
|
PG_FUNCTION_INFO_V1(gin_enum_cmp);
|
||||||
@ -477,3 +479,30 @@ leftmostvalue_enum(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
GIN_SUPPORT(anyenum, false, leftmostvalue_enum, gin_enum_cmp)
|
GIN_SUPPORT(anyenum, false, leftmostvalue_enum, gin_enum_cmp)
|
||||||
|
|
||||||
|
static Datum
|
||||||
|
leftmostvalue_uuid(void)
|
||||||
|
{
|
||||||
|
/* palloc0 will create the UUID with all zeroes: "00000000-0000-0000-0000-000000000000" */
|
||||||
|
pg_uuid_t *retval = (pg_uuid_t *) palloc0(sizeof(pg_uuid_t));
|
||||||
|
return UUIDPGetDatum(retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
GIN_SUPPORT(uuid, false, leftmostvalue_uuid, uuid_cmp)
|
||||||
|
|
||||||
|
static Datum
|
||||||
|
leftmostvalue_name(void)
|
||||||
|
{
|
||||||
|
NameData* result = (NameData *) palloc0(NAMEDATALEN);
|
||||||
|
return NameGetDatum(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
GIN_SUPPORT(name, false, leftmostvalue_name, btnamecmp)
|
||||||
|
|
||||||
|
static Datum
|
||||||
|
leftmostvalue_bool(void)
|
||||||
|
{
|
||||||
|
return BoolGetDatum(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
GIN_SUPPORT(bool, false, leftmostvalue_bool, btboolcmp)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# btree_gin extension
|
# btree_gin extension
|
||||||
comment = 'support for indexing common datatypes in GIN'
|
comment = 'support for indexing common datatypes in GIN'
|
||||||
default_version = '1.2'
|
default_version = '1.3'
|
||||||
module_pathname = '$libdir/btree_gin'
|
module_pathname = '$libdir/btree_gin'
|
||||||
relocatable = true
|
relocatable = true
|
||||||
|
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)
|
||||||
|
|
27
contrib/btree_gin/sql/bool.sql
Normal file
27
contrib/btree_gin/sql/bool.sql
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
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;
|
||||||
|
SELECT * FROM test_bool WHERE i<=true ORDER BY i;
|
||||||
|
SELECT * FROM test_bool WHERE i=true ORDER BY i;
|
||||||
|
SELECT * FROM test_bool WHERE i>=true ORDER BY i;
|
||||||
|
SELECT * FROM test_bool WHERE i>true ORDER BY i;
|
||||||
|
|
||||||
|
SELECT * FROM test_bool WHERE i<false ORDER BY i;
|
||||||
|
SELECT * FROM test_bool WHERE i<=false ORDER BY i;
|
||||||
|
SELECT * FROM test_bool WHERE i=false ORDER BY i;
|
||||||
|
SELECT * FROM test_bool WHERE i>=false ORDER BY i;
|
||||||
|
SELECT * FROM test_bool WHERE i>false ORDER BY i;
|
||||||
|
|
||||||
|
EXPLAIN (COSTS OFF) SELECT * FROM test_bool WHERE i<true ORDER BY i;
|
||||||
|
EXPLAIN (COSTS OFF) SELECT * FROM test_bool WHERE i<=true ORDER BY i;
|
||||||
|
EXPLAIN (COSTS OFF) SELECT * FROM test_bool WHERE i=true ORDER BY i;
|
||||||
|
EXPLAIN (COSTS OFF) SELECT * FROM test_bool WHERE i>=true ORDER BY i;
|
||||||
|
EXPLAIN (COSTS OFF) SELECT * FROM test_bool WHERE i>true ORDER BY i;
|
22
contrib/btree_gin/sql/bpchar.sql
Normal file
22
contrib/btree_gin/sql/bpchar.sql
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
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;
|
||||||
|
SELECT * FROM test_bpchar WHERE i<='abc' ORDER BY i;
|
||||||
|
SELECT * FROM test_bpchar WHERE i='abc' ORDER BY i;
|
||||||
|
SELECT * FROM test_bpchar WHERE i='abc ' ORDER BY i;
|
||||||
|
SELECT * FROM test_bpchar WHERE i>='abc' ORDER BY i;
|
||||||
|
SELECT * FROM test_bpchar WHERE i>'abc' ORDER BY i;
|
||||||
|
|
||||||
|
EXPLAIN (COSTS OFF) SELECT * FROM test_bpchar WHERE i<'abc' ORDER BY i;
|
||||||
|
EXPLAIN (COSTS OFF) SELECT * FROM test_bpchar WHERE i<='abc' ORDER BY i;
|
||||||
|
EXPLAIN (COSTS OFF) SELECT * FROM test_bpchar WHERE i='abc' ORDER BY i;
|
||||||
|
EXPLAIN (COSTS OFF) SELECT * FROM test_bpchar WHERE i>='abc' ORDER BY i;
|
||||||
|
EXPLAIN (COSTS OFF) SELECT * FROM test_bpchar WHERE i>'abc' ORDER BY i;
|
21
contrib/btree_gin/sql/name.sql
Normal file
21
contrib/btree_gin/sql/name.sql
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
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;
|
||||||
|
SELECT * FROM test_name WHERE i<='abc' ORDER BY i;
|
||||||
|
SELECT * FROM test_name WHERE i='abc' ORDER BY i;
|
||||||
|
SELECT * FROM test_name WHERE i>='abc' ORDER BY i;
|
||||||
|
SELECT * FROM test_name WHERE i>'abc' ORDER BY i;
|
||||||
|
|
||||||
|
EXPLAIN (COSTS OFF) SELECT * FROM test_name WHERE i<'abc' ORDER BY i;
|
||||||
|
EXPLAIN (COSTS OFF) SELECT * FROM test_name WHERE i<='abc' ORDER BY i;
|
||||||
|
EXPLAIN (COSTS OFF) SELECT * FROM test_name WHERE i='abc' ORDER BY i;
|
||||||
|
EXPLAIN (COSTS OFF) SELECT * FROM test_name WHERE i>='abc' ORDER BY i;
|
||||||
|
EXPLAIN (COSTS OFF) SELECT * FROM test_name WHERE i>'abc' ORDER BY i;
|
28
contrib/btree_gin/sql/uuid.sql
Normal file
28
contrib/btree_gin/sql/uuid.sql
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
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;
|
||||||
|
SELECT * FROM test_uuid WHERE i<='ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid ORDER BY i;
|
||||||
|
SELECT * FROM test_uuid WHERE i='ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid ORDER BY i;
|
||||||
|
SELECT * FROM test_uuid WHERE i>='ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid ORDER BY i;
|
||||||
|
SELECT * FROM test_uuid WHERE i>'ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid ORDER BY i;
|
||||||
|
|
||||||
|
EXPLAIN (COSTS OFF) SELECT * FROM test_uuid WHERE i<'ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid ORDER BY i;
|
||||||
|
EXPLAIN (COSTS OFF) SELECT * FROM test_uuid WHERE i<='ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid ORDER BY i;
|
||||||
|
EXPLAIN (COSTS OFF) SELECT * FROM test_uuid WHERE i='ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid ORDER BY i;
|
||||||
|
EXPLAIN (COSTS OFF) SELECT * FROM test_uuid WHERE i>='ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid ORDER BY i;
|
||||||
|
EXPLAIN (COSTS OFF) SELECT * FROM test_uuid WHERE i>'ce41c936-6acb-4feb-8c91-852a673e5a5c'::uuid ORDER BY i;
|
@ -17,7 +17,8 @@
|
|||||||
<type>oid</type>, <type>money</type>, <type>"char"</type>,
|
<type>oid</type>, <type>money</type>, <type>"char"</type>,
|
||||||
<type>varchar</type>, <type>text</type>, <type>bytea</type>, <type>bit</type>,
|
<type>varchar</type>, <type>text</type>, <type>bytea</type>, <type>bit</type>,
|
||||||
<type>varbit</type>, <type>macaddr</type>, <type>macaddr8</type>, <type>inet</type>,
|
<type>varbit</type>, <type>macaddr</type>, <type>macaddr8</type>, <type>inet</type>,
|
||||||
<type>cidr</type>, and all <type>enum</type> types.
|
<type>cidr</type>, <type>uuid</type>, <type>name</type>, <type>bool</type>,
|
||||||
|
<type>bpchar</type>, and all <type>enum</type> types.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user