1
0
mirror of https://github.com/postgres/postgres.git synced 2025-08-09 17:03:00 +03:00

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.
This commit is contained in:
Alexander Korotkov
2020-12-29 23:36:43 +03:00
parent d1d61a8b23
commit db6335b5b1
15 changed files with 1024 additions and 69 deletions

View File

@@ -116,6 +116,29 @@
<row><entry><literal>&gt;= (inet,inet)</literal></entry></row>
<row><entry><literal>&amp;&amp; (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>&amp;&amp; (anymultirange,anymultirange)</literal></entry></row>
<row><entry><literal>&amp;&amp; (anymultirange,anyrange)</literal></entry></row>
<row><entry><literal>@&gt; (anymultirange,anyelement)</literal></entry></row>
<row><entry><literal>@&gt; (anymultirange,anymultirange)</literal></entry></row>
<row><entry><literal>@&gt; (anymultirange,anyrange)</literal></entry></row>
<row><entry><literal>&lt;@ (anymultirange,anymultirange)</literal></entry></row>
<row><entry><literal>&lt;@ (anymultirange,anyrange)</literal></entry></row>
<row><entry><literal>&lt;&lt; (anymultirange,anymultirange)</literal></entry></row>
<row><entry><literal>&lt;&lt; (anymultirange,anyrange)</literal></entry></row>
<row><entry><literal>&gt;&gt; (anymultirange,anymultirange)</literal></entry></row>
<row><entry><literal>&gt;&gt; (anymultirange,anyrange)</literal></entry></row>
<row><entry><literal>&amp;&lt; (anymultirange,anymultirange)</literal></entry></row>
<row><entry><literal>&amp;&lt; (anymultirange,anyrange)</literal></entry></row>
<row><entry><literal>&amp;&gt; (anymultirange,anymultirange)</literal></entry></row>
<row><entry><literal>&amp;&gt; (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>|&gt;&gt; (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>&amp;&amp; (anyrange,anyrange)</literal></entry></row>
<row><entry><literal>&amp;&amp; (anyrange,anymultirange)</literal></entry></row>
<row><entry><literal>@&gt; (anyrange,anyelement)</literal></entry></row>
<row><entry><literal>@&gt; (anyrange,anyrange)</literal></entry></row>
<row><entry><literal>@&gt; (anyrange,anymultirange)</literal></entry></row>
<row><entry><literal>&lt;@ (anyrange,anyrange)</literal></entry></row>
<row><entry><literal>&lt;@ (anyrange,anymultirange)</literal></entry></row>
<row><entry><literal>&lt;&lt; (anyrange,anyrange)</literal></entry></row>
<row><entry><literal>&lt;&lt; (anyrange,anymultirange)</literal></entry></row>
<row><entry><literal>&gt;&gt; (anyrange,anyrange)</literal></entry></row>
<row><entry><literal>&gt;&gt; (anyrange,anymultirange)</literal></entry></row>
<row><entry><literal>&amp;&lt; (anyrange,anyrange)</literal></entry></row>
<row><entry><literal>&amp;&lt; (anyrange,anymultirange)</literal></entry></row>
<row><entry><literal>&amp;&gt; (anyrange,anyrange)</literal></entry></row>
<row><entry><literal>&amp;&gt; (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>

View File

@@ -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>&amp;&amp;</literal>,
<literal>&lt;@</literal>,
@@ -482,8 +484,21 @@ CREATE INDEX reservation_idx ON reservation USING GIST (during);
<literal>&gt;&gt;</literal>,
<literal>-|-</literal>,
<literal>&amp;&lt;</literal>, and
<literal>&amp;&gt;</literal>
(see <xref linkend="range-operators-table"/> for more information).
<literal>&amp;&gt;</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>&amp;&amp;</literal>,
<literal>&lt;@</literal>,
<literal>@&gt;</literal>,
<literal>&lt;&lt;</literal>,
<literal>&gt;&gt;</literal>,
<literal>-|-</literal>,
<literal>&amp;&lt;</literal>, and
<literal>&amp;&gt;</literal>.
See <xref linkend="range-operators-table"/> for more information.
</para>
<para>