mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
Remove <@ from contrib/intarray's GiST operator classes.
Since commitefc77cf5f
, an indexed query using <@ has required a full-index scan, so that it actually performs worse than a plain seqscan would do. As I noted at the time, we'd be better off to not treat <@ as being indexable by such indexes at all; and that's what this patch does. It would have been difficult to remove these opclass members without dropping the whole opclass before commit9f9682783
fixed GiST opclass member dependency rules, but now it's quite simple, so let's do it. I left the existing support code in place for the time being, with comments noting it's now unreachable. At some point, perhaps we should remove that code in favor of throwing an error telling people to upgrade the extension version. Discussion: https://postgr.es/m/2176979.1596389859@sss.pgh.pa.us Discussion: https://postgr.es/m/458.1565114141@sss.pgh.pa.us
This commit is contained in:
@ -12,7 +12,8 @@ OBJS = \
|
||||
_intbig_gist.o
|
||||
|
||||
EXTENSION = intarray
|
||||
DATA = intarray--1.2--1.3.sql intarray--1.2.sql intarray--1.1--1.2.sql \
|
||||
DATA = intarray--1.3--1.4.sql intarray--1.2--1.3.sql \
|
||||
intarray--1.2.sql intarray--1.1--1.2.sql \
|
||||
intarray--1.0--1.1.sql
|
||||
PGFILEDESC = "intarray - functions and operators for arrays of integers"
|
||||
|
||||
|
@ -93,6 +93,12 @@ g_int_consistent(PG_FUNCTION_ARGS)
|
||||
break;
|
||||
case RTContainedByStrategyNumber:
|
||||
case RTOldContainedByStrategyNumber:
|
||||
|
||||
/*
|
||||
* This code is unreachable as of intarray 1.4, because the <@
|
||||
* operator has been removed from the opclass. We keep it for now
|
||||
* to support older versions of the SQL definitions.
|
||||
*/
|
||||
if (GIST_LEAF(entry))
|
||||
retval = inner_int_contains(query,
|
||||
(ArrayType *) DatumGetPointer(entry->key));
|
||||
|
@ -533,6 +533,12 @@ g_intbig_consistent(PG_FUNCTION_ARGS)
|
||||
break;
|
||||
case RTContainedByStrategyNumber:
|
||||
case RTOldContainedByStrategyNumber:
|
||||
|
||||
/*
|
||||
* This code is unreachable as of intarray 1.4, because the <@
|
||||
* operator has been removed from the opclass. We keep it for now
|
||||
* to support older versions of the SQL definitions.
|
||||
*/
|
||||
if (GIST_LEAF(entry))
|
||||
{
|
||||
int i,
|
||||
|
21
contrib/intarray/intarray--1.3--1.4.sql
Normal file
21
contrib/intarray/intarray--1.3--1.4.sql
Normal file
@ -0,0 +1,21 @@
|
||||
/* contrib/intarray/intarray--1.3--1.4.sql */
|
||||
|
||||
-- complain if script is sourced in psql, rather than via ALTER EXTENSION
|
||||
\echo Use "ALTER EXTENSION intarray UPDATE TO '1.4'" to load this file. \quit
|
||||
|
||||
-- Remove <@ from the GiST opclasses, as it's not usefully indexable
|
||||
-- due to mishandling of empty arrays. (It's OK in GIN.)
|
||||
|
||||
ALTER OPERATOR FAMILY gist__int_ops USING gist
|
||||
DROP OPERATOR 8 (_int4, _int4);
|
||||
|
||||
ALTER OPERATOR FAMILY gist__intbig_ops USING gist
|
||||
DROP OPERATOR 8 (_int4, _int4);
|
||||
|
||||
-- Likewise for the old spelling ~.
|
||||
|
||||
ALTER OPERATOR FAMILY gist__int_ops USING gist
|
||||
DROP OPERATOR 14 (_int4, _int4);
|
||||
|
||||
ALTER OPERATOR FAMILY gist__intbig_ops USING gist
|
||||
DROP OPERATOR 14 (_int4, _int4);
|
@ -1,6 +1,6 @@
|
||||
# intarray extension
|
||||
comment = 'functions, operators, and index support for 1-D arrays of integers'
|
||||
default_version = '1.3'
|
||||
default_version = '1.4'
|
||||
module_pathname = '$libdir/_int'
|
||||
relocatable = true
|
||||
trusted = true
|
||||
|
Reference in New Issue
Block a user