diff options
author | Alexander Korotkov <akorotkov@postgresql.org> | 2020-12-29 23:36:43 +0300 |
---|---|---|
committer | Alexander Korotkov <akorotkov@postgresql.org> | 2020-12-29 23:36:43 +0300 |
commit | db6335b5b1d6654b0e3104f36817800d127c1c91 (patch) | |
tree | 831be345c2a6197e3264f178ffbaae25f34e546c /doc/src | |
parent | d1d61a8b23b604faf797695eeacaa5da4fe64762 (diff) | |
download | postgresql-db6335b5b1d6654b0e3104f36817800d127c1c91.tar.gz postgresql-db6335b5b1d6654b0e3104f36817800d127c1c91.zip |
Add support of multirange matching to the existing range GiST indexes
6df7a9698b has introduced a set of operators between ranges and multiranges.
Existing GiST indexes for ranges could easily support majority of them.
This commit adds support for new operators to the existing range GiST indexes.
New operators resides the same strategy numbers as existing ones. Appropriate
check function is determined using the subtype.
Catversion is bumped.
Diffstat (limited to 'doc/src')
-rw-r--r-- | doc/src/sgml/gist.sgml | 35 | ||||
-rw-r--r-- | doc/src/sgml/rangetypes.sgml | 21 |
2 files changed, 51 insertions, 5 deletions
diff --git a/doc/src/sgml/gist.sgml b/doc/src/sgml/gist.sgml index d1b6cc9a01a..dc1f192bddf 100644 --- a/doc/src/sgml/gist.sgml +++ b/doc/src/sgml/gist.sgml @@ -117,6 +117,29 @@ <row><entry><literal>&& (inet,inet)</literal></entry></row> <row> + <entry valign="middle" morerows="17"><literal>multirange_ops</literal></entry> + <entry><literal>= (anymultirange,anymultirange)</literal></entry> + <entry valign="middle" morerows="17"></entry> + </row> + <row><entry><literal>&& (anymultirange,anymultirange)</literal></entry></row> + <row><entry><literal>&& (anymultirange,anyrange)</literal></entry></row> + <row><entry><literal>@> (anymultirange,anyelement)</literal></entry></row> + <row><entry><literal>@> (anymultirange,anymultirange)</literal></entry></row> + <row><entry><literal>@> (anymultirange,anyrange)</literal></entry></row> + <row><entry><literal><@ (anymultirange,anymultirange)</literal></entry></row> + <row><entry><literal><@ (anymultirange,anyrange)</literal></entry></row> + <row><entry><literal><< (anymultirange,anymultirange)</literal></entry></row> + <row><entry><literal><< (anymultirange,anyrange)</literal></entry></row> + <row><entry><literal>>> (anymultirange,anymultirange)</literal></entry></row> + <row><entry><literal>>> (anymultirange,anyrange)</literal></entry></row> + <row><entry><literal>&< (anymultirange,anymultirange)</literal></entry></row> + <row><entry><literal>&< (anymultirange,anyrange)</literal></entry></row> + <row><entry><literal>&> (anymultirange,anymultirange)</literal></entry></row> + <row><entry><literal>&> (anymultirange,anyrange)</literal></entry></row> + <row><entry><literal>-|- (anymultirange,anymultirange)</literal></entry></row> + <row><entry><literal>-|- (anymultirange,anyrange)</literal></entry></row> + + <row> <entry valign="middle" morerows="7"><literal>point_ops</literal></entry> <entry><literal>|>> (point,point)</literal></entry> <entry valign="middle" morerows="7"><literal><-> (point,point)</literal></entry> @@ -149,19 +172,27 @@ <row><entry><literal>~ (polygon,polygon)</literal></entry></row> <row> - <entry valign="middle" morerows="9"><literal>range_ops</literal></entry> + <entry valign="middle" morerows="17"><literal>range_ops</literal></entry> <entry><literal>= (anyrange,anyrange)</literal></entry> - <entry valign="middle" morerows="9"></entry> + <entry valign="middle" morerows="17"></entry> </row> <row><entry><literal>&& (anyrange,anyrange)</literal></entry></row> + <row><entry><literal>&& (anyrange,anymultirange)</literal></entry></row> <row><entry><literal>@> (anyrange,anyelement)</literal></entry></row> <row><entry><literal>@> (anyrange,anyrange)</literal></entry></row> + <row><entry><literal>@> (anyrange,anymultirange)</literal></entry></row> <row><entry><literal><@ (anyrange,anyrange)</literal></entry></row> + <row><entry><literal><@ (anyrange,anymultirange)</literal></entry></row> <row><entry><literal><< (anyrange,anyrange)</literal></entry></row> + <row><entry><literal><< (anyrange,anymultirange)</literal></entry></row> <row><entry><literal>>> (anyrange,anyrange)</literal></entry></row> + <row><entry><literal>>> (anyrange,anymultirange)</literal></entry></row> <row><entry><literal>&< (anyrange,anyrange)</literal></entry></row> + <row><entry><literal>&< (anyrange,anymultirange)</literal></entry></row> <row><entry><literal>&> (anyrange,anyrange)</literal></entry></row> + <row><entry><literal>&> (anyrange,anymultirange)</literal></entry></row> <row><entry><literal>-|- (anyrange,anyrange)</literal></entry></row> + <row><entry><literal>-|- (anyrange,anymultirange)</literal></entry></row> <row> <entry valign="middle" morerows="1"><literal>tsquery_ops</literal></entry> diff --git a/doc/src/sgml/rangetypes.sgml b/doc/src/sgml/rangetypes.sgml index 859079c69ca..91e353d4fdb 100644 --- a/doc/src/sgml/rangetypes.sgml +++ b/doc/src/sgml/rangetypes.sgml @@ -469,11 +469,13 @@ SELECT '[11:10, 23:00]'::timerange; <para> GiST and SP-GiST indexes can be created for table columns of range types. + GiST indexes can be also created for table columns of multirange types. For instance, to create a GiST index: <programlisting> CREATE INDEX reservation_idx ON reservation USING GIST (during); </programlisting> - A GiST or SP-GiST index can accelerate queries involving these range operators: + A GiST or SP-GiST index on ranges can accelerate queries involving these + range operators: <literal>=</literal>, <literal>&&</literal>, <literal><@</literal>, @@ -482,8 +484,21 @@ CREATE INDEX reservation_idx ON reservation USING GIST (during); <literal>>></literal>, <literal>-|-</literal>, <literal>&<</literal>, and - <literal>&></literal> - (see <xref linkend="range-operators-table"/> for more information). + <literal>&></literal>. + A GiST index on multiranges can accelerate queries involving the same + set of multirange operators. + A GiST index on ranges and GiST index on multiranges can also accelerate + queries involving these cross-type range to multirange and multirange to + range operators correspondingly: + <literal>&&</literal>, + <literal><@</literal>, + <literal>@></literal>, + <literal><<</literal>, + <literal>>></literal>, + <literal>-|-</literal>, + <literal>&<</literal>, and + <literal>&></literal>. + See <xref linkend="range-operators-table"/> for more information. </para> <para> |