mirror of
https://github.com/postgres/postgres.git
synced 2025-05-06 19:59:18 +03:00
Add index-only scan support to range type GiST opclass.
Andreas Karlsson
This commit is contained in:
parent
1c41e2a998
commit
0633a60f4d
@ -216,7 +216,7 @@ range_gist_union(PG_FUNCTION_ARGS)
|
|||||||
PG_RETURN_RANGE(result_range);
|
PG_RETURN_RANGE(result_range);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* compress, decompress are no-ops */
|
/* compress, decompress, fetch are no-ops */
|
||||||
Datum
|
Datum
|
||||||
range_gist_compress(PG_FUNCTION_ARGS)
|
range_gist_compress(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
@ -233,6 +233,14 @@ range_gist_decompress(PG_FUNCTION_ARGS)
|
|||||||
PG_RETURN_POINTER(entry);
|
PG_RETURN_POINTER(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Datum
|
||||||
|
range_gist_fetch(PG_FUNCTION_ARGS)
|
||||||
|
{
|
||||||
|
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
|
||||||
|
|
||||||
|
PG_RETURN_POINTER(entry);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GiST page split penalty function.
|
* GiST page split penalty function.
|
||||||
*
|
*
|
||||||
|
@ -53,6 +53,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* yyyymmddN */
|
/* yyyymmddN */
|
||||||
#define CATALOG_VERSION_NO 201503281
|
#define CATALOG_VERSION_NO 201503301
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -235,6 +235,7 @@ DATA(insert ( 3919 3831 3831 4 3878 ));
|
|||||||
DATA(insert ( 3919 3831 3831 5 3879 ));
|
DATA(insert ( 3919 3831 3831 5 3879 ));
|
||||||
DATA(insert ( 3919 3831 3831 6 3880 ));
|
DATA(insert ( 3919 3831 3831 6 3880 ));
|
||||||
DATA(insert ( 3919 3831 3831 7 3881 ));
|
DATA(insert ( 3919 3831 3831 7 3881 ));
|
||||||
|
DATA(insert ( 3919 3831 3831 9 3996 ));
|
||||||
|
|
||||||
|
|
||||||
/* gin */
|
/* gin */
|
||||||
|
@ -4951,6 +4951,8 @@ DATA(insert OID = 3877 ( range_gist_compress PGNSP PGUID 12 1 0 0 0 f f f f t f
|
|||||||
DESCR("GiST support");
|
DESCR("GiST support");
|
||||||
DATA(insert OID = 3878 ( range_gist_decompress PGNSP PGUID 12 1 0 0 0 f f f f t f i 1 0 2281 "2281" _null_ _null_ _null_ _null_ range_gist_decompress _null_ _null_ _null_ ));
|
DATA(insert OID = 3878 ( range_gist_decompress PGNSP PGUID 12 1 0 0 0 f f f f t f i 1 0 2281 "2281" _null_ _null_ _null_ _null_ range_gist_decompress _null_ _null_ _null_ ));
|
||||||
DESCR("GiST support");
|
DESCR("GiST support");
|
||||||
|
DATA(insert OID = 3996 ( range_gist_fetch PGNSP PGUID 12 1 0 0 0 f f f f t f i 1 0 2281 "2281" _null_ _null_ _null_ _null_ range_gist_fetch _null_ _null_ _null_ ));
|
||||||
|
DESCR("GiST support");
|
||||||
DATA(insert OID = 3879 ( range_gist_penalty PGNSP PGUID 12 1 0 0 0 f f f f t f i 3 0 2281 "2281 2281 2281" _null_ _null_ _null_ _null_ range_gist_penalty _null_ _null_ _null_ ));
|
DATA(insert OID = 3879 ( range_gist_penalty PGNSP PGUID 12 1 0 0 0 f f f f t f i 3 0 2281 "2281 2281 2281" _null_ _null_ _null_ _null_ range_gist_penalty _null_ _null_ _null_ ));
|
||||||
DESCR("GiST support");
|
DESCR("GiST support");
|
||||||
DATA(insert OID = 3880 ( range_gist_picksplit PGNSP PGUID 12 1 0 0 0 f f f f t f i 2 0 2281 "2281 2281" _null_ _null_ _null_ _null_ range_gist_picksplit _null_ _null_ _null_ ));
|
DATA(insert OID = 3880 ( range_gist_picksplit PGNSP PGUID 12 1 0 0 0 f f f f t f i 2 0 2281 "2281 2281" _null_ _null_ _null_ _null_ range_gist_picksplit _null_ _null_ _null_ ));
|
||||||
|
@ -209,6 +209,7 @@ extern RangeType *make_empty_range(TypeCacheEntry *typcache);
|
|||||||
extern Datum range_gist_consistent(PG_FUNCTION_ARGS);
|
extern Datum range_gist_consistent(PG_FUNCTION_ARGS);
|
||||||
extern Datum range_gist_compress(PG_FUNCTION_ARGS);
|
extern Datum range_gist_compress(PG_FUNCTION_ARGS);
|
||||||
extern Datum range_gist_decompress(PG_FUNCTION_ARGS);
|
extern Datum range_gist_decompress(PG_FUNCTION_ARGS);
|
||||||
|
extern Datum range_gist_fetch(PG_FUNCTION_ARGS);
|
||||||
extern Datum range_gist_union(PG_FUNCTION_ARGS);
|
extern Datum range_gist_union(PG_FUNCTION_ARGS);
|
||||||
extern Datum range_gist_penalty(PG_FUNCTION_ARGS);
|
extern Datum range_gist_penalty(PG_FUNCTION_ARGS);
|
||||||
extern Datum range_gist_picksplit(PG_FUNCTION_ARGS);
|
extern Datum range_gist_picksplit(PG_FUNCTION_ARGS);
|
||||||
|
@ -1072,6 +1072,25 @@ select count(*) from test_range_spgist where ir -|- int4range(100,500);
|
|||||||
5
|
5
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
|
-- test index-only scans
|
||||||
|
explain (costs off)
|
||||||
|
select ir from test_range_spgist where ir -|- int4range(10,20) order by ir;
|
||||||
|
QUERY PLAN
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
Sort
|
||||||
|
Sort Key: ir
|
||||||
|
-> Index Only Scan using test_range_spgist_idx on test_range_spgist
|
||||||
|
Index Cond: (ir -|- '[10,20)'::int4range)
|
||||||
|
(4 rows)
|
||||||
|
|
||||||
|
select ir from test_range_spgist where ir -|- int4range(10,20) order by ir;
|
||||||
|
ir
|
||||||
|
------------
|
||||||
|
[20,30)
|
||||||
|
[20,30)
|
||||||
|
[20,10020)
|
||||||
|
(3 rows)
|
||||||
|
|
||||||
RESET enable_seqscan;
|
RESET enable_seqscan;
|
||||||
RESET enable_indexscan;
|
RESET enable_indexscan;
|
||||||
RESET enable_bitmapscan;
|
RESET enable_bitmapscan;
|
||||||
|
@ -286,6 +286,11 @@ select count(*) from test_range_spgist where ir &< int4range(100,500);
|
|||||||
select count(*) from test_range_spgist where ir &> int4range(100,500);
|
select count(*) from test_range_spgist where ir &> int4range(100,500);
|
||||||
select count(*) from test_range_spgist where ir -|- int4range(100,500);
|
select count(*) from test_range_spgist where ir -|- int4range(100,500);
|
||||||
|
|
||||||
|
-- test index-only scans
|
||||||
|
explain (costs off)
|
||||||
|
select ir from test_range_spgist where ir -|- int4range(10,20) order by ir;
|
||||||
|
select ir from test_range_spgist where ir -|- int4range(10,20) order by ir;
|
||||||
|
|
||||||
RESET enable_seqscan;
|
RESET enable_seqscan;
|
||||||
RESET enable_indexscan;
|
RESET enable_indexscan;
|
||||||
RESET enable_bitmapscan;
|
RESET enable_bitmapscan;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user