pg.ddx.io pgsql-docs@postgresql.org mailing list archive
help / color / mirror / Atom feedRe: Document "59.2. Built-in Operator Classes" have a clerical error?
28+ messages / 4 participants
[nested] [flat]
Commits from this thread:
2020-08-28 7a1cd5260a doc: Rework tables for built-in operator classes of index AMs
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-03 07:49 Michael Paquier <michael@paquier.xyz>
0 siblings, 2 replies; 28+ messages in thread
From: Michael Paquier @ 2020-08-03 07:49 UTC (permalink / raw)
To: osdba <mailtch@163.com>; +Cc: pgsql-docs
On Mon, Aug 03, 2020 at 03:14:56PM +0800, osdba wrote:
> "range_opsany range type&& &> &< >> << <@ -|- = @> @>", exist double "@>",
>
> Should be "<@ @>" ?
Indeed, this needs to be improved. Another issue on the same page is
that point_ops lists the same operator three times, <@. Other index
pages don't seem to have any inconsistencies, fortunately.
--
Michael
Attachments:
signature.asc (application/pgp-signature, 832B) download
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-03 11:23 Tom Lane <tgl@sss.pgh.pa.us>
parent: Michael Paquier <michael@paquier.xyz>
1 sibling, 1 reply; 28+ messages in thread
From: Tom Lane @ 2020-08-03 11:23 UTC (permalink / raw)
To: Michael Paquier <michael@paquier.xyz>; +Cc: osdba <mailtch@163.com>; pgsql-docs
Michael Paquier <michael@paquier.xyz> writes:
> On Mon, Aug 03, 2020 at 03:14:56PM +0800, osdba wrote:
>> "range_opsany range type&& &> &< >> << <@ -|- = @> @>", exist double "@>",
>> Should be "<@ @>" ?
> Indeed, this needs to be improved. Another issue on the same page is
> that point_ops lists the same operator three times, <@. Other index
> pages don't seem to have any inconsistencies, fortunately.
psql's handy new \dAo query clarifies things a bit:
regression=# \dAo gist range_ops
List of operators of operator families
AM | Operator family | Operator | Strategy | Purpose
------+-----------------+-------------------------+----------+---------
gist | range_ops | <<(anyrange,anyrange) | 1 | search
gist | range_ops | &<(anyrange,anyrange) | 2 | search
gist | range_ops | &&(anyrange,anyrange) | 3 | search
gist | range_ops | &>(anyrange,anyrange) | 4 | search
gist | range_ops | >>(anyrange,anyrange) | 5 | search
gist | range_ops | -|-(anyrange,anyrange) | 6 | search
gist | range_ops | @>(anyrange,anyrange) | 7 | search
gist | range_ops | <@(anyrange,anyrange) | 8 | search
gist | range_ops | =(anyrange,anyrange) | 18 | search
gist | range_ops | @>(anyrange,anyelement) | 16 | search
(10 rows)
regression=# \dAo gist point_ops
List of operators of operator families
AM | Operator family | Operator | Strategy | Purpose
------+-----------------+-------------------+----------+----------
gist | point_ops | <<(point,point) | 1 | search
gist | point_ops | >>(point,point) | 5 | search
gist | point_ops | ~=(point,point) | 6 | search
gist | point_ops | <^(point,point) | 10 | search
gist | point_ops | >^(point,point) | 11 | search
gist | point_ops | <->(point,point) | 15 | ordering
gist | point_ops | <@(point,box) | 28 | search
gist | point_ops | <@(point,circle) | 68 | search
gist | point_ops | <@(point,polygon) | 48 | search
(9 rows)
So I don't think it's a clerical error, but certainly showing these
operators this way is none too helpful. Perhaps including the input types
in this table (and its siblings elsewhere) would be a good thing.
(Looking at these, I'm reminded anew that the sort ordering used by \dAo
is still questionable ...)
regards, tom lane
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-04 05:56 Michael Paquier <michael@paquier.xyz>
parent: Tom Lane <tgl@sss.pgh.pa.us>
0 siblings, 0 replies; 28+ messages in thread
From: Michael Paquier @ 2020-08-04 05:56 UTC (permalink / raw)
To: Tom Lane <tgl@sss.pgh.pa.us>; +Cc: osdba <mailtch@163.com>; pgsql-docs
On Mon, Aug 03, 2020 at 07:23:48AM -0400, Tom Lane wrote:
> So I don't think it's a clerical error, but certainly showing these
> operators this way is none too helpful. Perhaps including the input types
> in this table (and its siblings elsewhere) would be a good thing.
Ah, thanks. I did not consider the psql shortcut. I agree that
including the input types would be a good idea. But just doing that
may not be enough IMO as the character policy used on our website for
the HTML docs makes that harder to parse. What if we switched the
third column to have one line per operator with its input type, and
use morerows to show the full set of indexable operators one opclass
is associated with? Contrary to wait events, those tables don't
change much. I am wondering as well if we should consider mentioning
\dAo on all those pages, say at the bottom of each table listing the
opclasses.
--
Michael
Attachments:
signature.asc (application/pgp-signature, 832B) download
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-21 23:16 Bruce Momjian <bruce@momjian.us>
parent: Michael Paquier <michael@paquier.xyz>
1 sibling, 1 reply; 28+ messages in thread
From: Bruce Momjian @ 2020-08-21 23:16 UTC (permalink / raw)
To: Michael Paquier <michael@paquier.xyz>; +Cc: osdba <mailtch@163.com>; pgsql-docs
On Mon, Aug 3, 2020 at 04:49:04PM +0900, Michael Paquier wrote:
> On Mon, Aug 03, 2020 at 03:14:56PM +0800, osdba wrote:
> > "range_opsany range type&& &> &< >> << <@ -|- = @> @>", exist double "@>",
> >
> > Should be "<@ @>" ?
>
> Indeed, this needs to be improved. Another issue on the same page is
> that point_ops lists the same operator three times, <@. Other index
> pages don't seem to have any inconsistencies, fortunately.
I decided to remove the duplicates and just add "(multiple)" after
operators that have multiple system table entries; patch attached.
--
Bruce Momjian <bruce@momjian.us> https://momjian.us
EnterpriseDB https://enterprisedb.com
The usefulness of a cup is in its emptiness, Bruce Lee
Attachments:
operator.diff (text/x-diff, 771B) download
diff --git a/doc/src/sgml/gist.sgml b/doc/src/sgml/gist.sgml
index 5d970ee9f2..28e5e67e39 100644
--- a/doc/src/sgml/gist.sgml
+++ b/doc/src/sgml/gist.sgml
@@ -135,9 +135,7 @@
<literal>>></literal>
<literal>>^</literal>
<literal><<</literal>
- <literal><@</literal>
- <literal><@</literal>
- <literal><@</literal>
+ <literal><@</literal> (multiple)
<literal><^</literal>
<literal>~=</literal>
</entry>
@@ -180,8 +178,7 @@
<literal><@</literal>
<literal>-|-</literal>
<literal>=</literal>
- <literal>@></literal>
- <literal>@></literal>
+ <literal>@></literal> (multiple)
</entry>
<entry>
</entry>
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-22 03:19 Alvaro Herrera <alvherre@2ndquadrant.com>
parent: Bruce Momjian <bruce@momjian.us>
0 siblings, 1 reply; 28+ messages in thread
From: Alvaro Herrera @ 2020-08-22 03:19 UTC (permalink / raw)
To: Bruce Momjian <bruce@momjian.us>; +Cc: Michael Paquier <michael@paquier.xyz>; osdba <mailtch@163.com>; pgsql-docs
On 2020-Aug-21, Bruce Momjian wrote:
> On Mon, Aug 3, 2020 at 04:49:04PM +0900, Michael Paquier wrote:
> > On Mon, Aug 03, 2020 at 03:14:56PM +0800, osdba wrote:
> > > "range_opsany range type&& &> &< >> << <@ -|- = @> @>", exist double "@>",
> > >
> > > Should be "<@ @>" ?
> >
> > Indeed, this needs to be improved. Another issue on the same page is
> > that point_ops lists the same operator three times, <@. Other index
> > pages don't seem to have any inconsistencies, fortunately.
>
> I decided to remove the duplicates and just add "(multiple)" after
> operators that have multiple system table entries; patch attached.
Now that we can point people to psql's \dAo, do we really need to have
these tables at all?
--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-22 12:23 Michael Paquier <michael@paquier.xyz>
parent: Alvaro Herrera <alvherre@2ndquadrant.com>
0 siblings, 1 reply; 28+ messages in thread
From: Michael Paquier @ 2020-08-22 12:23 UTC (permalink / raw)
To: Alvaro Herrera <alvherre@2ndquadrant.com>; +Cc: Bruce Momjian <bruce@momjian.us>; osdba <mailtch@163.com>; pgsql-docs
On Fri, Aug 21, 2020 at 11:19:07PM -0400, Alvaro Herrera wrote:
> Now that we can point people to psql's \dAo, do we really need to have
> these tables at all?
Having the tables is IMO still useful as a quick reference for users
that don't have immediately psql at hand when working on an
application, for example imagine somebody using pgAdmin. And I would
imagine that such people are not few. Another risk here is somebody
using psql with a server that has a major version different than the
one they are working on, leading to false assumptions? Having at
least a mention to those psql shortcuts in the docs is still a good
idea IMO, as said upthread:
https://www.postgresql.org/message-id/20200804055651.GC2091@paquier.xyz
--
Michael
Attachments:
signature.asc (application/pgp-signature, 832B) download
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-22 16:55 Bruce Momjian <bruce@momjian.us>
parent: Michael Paquier <michael@paquier.xyz>
0 siblings, 1 reply; 28+ messages in thread
From: Bruce Momjian @ 2020-08-22 16:55 UTC (permalink / raw)
To: Michael Paquier <michael@paquier.xyz>; +Cc: Alvaro Herrera <alvherre@2ndquadrant.com>; osdba <mailtch@163.com>; pgsql-docs
On Sat, Aug 22, 2020 at 09:23:19PM +0900, Michael Paquier wrote:
> On Fri, Aug 21, 2020 at 11:19:07PM -0400, Alvaro Herrera wrote:
> > Now that we can point people to psql's \dAo, do we really need to have
> > these tables at all?
>
> Having the tables is IMO still useful as a quick reference for users
> that don't have immediately psql at hand when working on an
> application, for example imagine somebody using pgAdmin. And I would
> imagine that such people are not few. Another risk here is somebody
> using psql with a server that has a major version different than the
> one they are working on, leading to false assumptions? Having at
> least a mention to those psql shortcuts in the docs is still a good
> idea IMO, as said upthread:
> https://www.postgresql.org/message-id/20200804055651.GC2091@paquier.xyz
Yeah, I kind of like the table myself too, because this topic is already
so complicated.
--
Bruce Momjian <bruce@momjian.us> https://momjian.us
EnterpriseDB https://enterprisedb.com
The usefulness of a cup is in its emptiness, Bruce Lee
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-22 17:27 Tom Lane <tgl@sss.pgh.pa.us>
parent: Bruce Momjian <bruce@momjian.us>
0 siblings, 1 reply; 28+ messages in thread
From: Tom Lane @ 2020-08-22 17:27 UTC (permalink / raw)
To: Bruce Momjian <bruce@momjian.us>; +Cc: Michael Paquier <michael@paquier.xyz>; Alvaro Herrera <alvherre@2ndquadrant.com>; osdba <mailtch@163.com>; pgsql-docs
Bruce Momjian <bruce@momjian.us> writes:
> Yeah, I kind of like the table myself too, because this topic is already
> so complicated.
Agreed. I'm not very happy with the suggestion of "(multiple)" though;
I think that will just add confusion.
If you don't want to go all the way and list the operators with their
input types, maybe we should just do what the OP thought was correct
and delete the duplicate operator names. It's already the case that
the table isn't telling you exactly which input types the operators
accept, so why not be a little bit fuzzier?
regards, tom lane
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-22 18:59 Alvaro Herrera <alvherre@2ndquadrant.com>
parent: Tom Lane <tgl@sss.pgh.pa.us>
0 siblings, 1 reply; 28+ messages in thread
From: Alvaro Herrera @ 2020-08-22 18:59 UTC (permalink / raw)
To: Tom Lane <tgl@sss.pgh.pa.us>; +Cc: Bruce Momjian <bruce@momjian.us>; Michael Paquier <michael@paquier.xyz>; osdba <mailtch@163.com>; pgsql-docs
On 2020-Aug-22, Tom Lane wrote:
> If you don't want to go all the way and list the operators with their
> input types, maybe we should just do what the OP thought was correct
> and delete the duplicate operator names. It's already the case that
> the table isn't telling you exactly which input types the operators
> accept, so why not be a little bit fuzzier?
Well, if we're going to have a table, let's have a useful table. What's
wrong with using the same contents \dAo shows? It seemed reasonable
enough to me.
Now of course I would suggest that other client programs such as pgAdmin
ought to display what \dAo shows too ;-)
--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-24 14:22 Bruce Momjian <bruce@momjian.us>
parent: Alvaro Herrera <alvherre@2ndquadrant.com>
0 siblings, 1 reply; 28+ messages in thread
From: Bruce Momjian @ 2020-08-24 14:22 UTC (permalink / raw)
To: Alvaro Herrera <alvherre@2ndquadrant.com>; +Cc: Tom Lane <tgl@sss.pgh.pa.us>; Michael Paquier <michael@paquier.xyz>; osdba <mailtch@163.com>; pgsql-docs
On Sat, Aug 22, 2020 at 02:59:02PM -0400, Alvaro Herrera wrote:
> On 2020-Aug-22, Tom Lane wrote:
>
> > If you don't want to go all the way and list the operators with their
> > input types, maybe we should just do what the OP thought was correct
> > and delete the duplicate operator names. It's already the case that
> > the table isn't telling you exactly which input types the operators
> > accept, so why not be a little bit fuzzier?
>
> Well, if we're going to have a table, let's have a useful table. What's
> wrong with using the same contents \dAo shows? It seemed reasonable
> enough to me.
I don't think it is worth it, plus we would need to adjust the docs if
system catalog layout changes. I think we just want something concise
and simple, but also accurate.
--
Bruce Momjian <bruce@momjian.us> https://momjian.us
EnterpriseDB https://enterprisedb.com
The usefulness of a cup is in its emptiness, Bruce Lee
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-24 15:59 Alvaro Herrera <alvherre@2ndquadrant.com>
parent: Bruce Momjian <bruce@momjian.us>
0 siblings, 1 reply; 28+ messages in thread
From: Alvaro Herrera @ 2020-08-24 15:59 UTC (permalink / raw)
To: Bruce Momjian <bruce@momjian.us>; +Cc: Tom Lane <tgl@sss.pgh.pa.us>; Michael Paquier <michael@paquier.xyz>; osdba <mailtch@163.com>; pgsql-docs
On 2020-Aug-24, Bruce Momjian wrote:
> I don't think it is worth it, plus we would need to adjust the docs if
> system catalog layout changes. I think we just want something concise
> and simple, but also accurate.
I argued for \dAo, not straight catalog output -- that was a straw man.
I can't produce the docbook right now but I volunteer to show a
screenshot for what I propose later this week.
--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-24 16:01 Bruce Momjian <bruce@momjian.us>
parent: Alvaro Herrera <alvherre@2ndquadrant.com>
0 siblings, 1 reply; 28+ messages in thread
From: Bruce Momjian @ 2020-08-24 16:01 UTC (permalink / raw)
To: Alvaro Herrera <alvherre@2ndquadrant.com>; +Cc: Tom Lane <tgl@sss.pgh.pa.us>; Michael Paquier <michael@paquier.xyz>; osdba <mailtch@163.com>; pgsql-docs
On Mon, Aug 24, 2020 at 11:59:22AM -0400, Alvaro Herrera wrote:
> On 2020-Aug-24, Bruce Momjian wrote:
>
> > I don't think it is worth it, plus we would need to adjust the docs if
> > system catalog layout changes. I think we just want something concise
> > and simple, but also accurate.
>
> I argued for \dAo, not straight catalog output -- that was a straw man.
>
> I can't produce the docbook right now but I volunteer to show a
> screenshot for what I propose later this week.
Sure, I can wait. Is this the only place where it would make sense?
--
Bruce Momjian <bruce@momjian.us> https://momjian.us
EnterpriseDB https://enterprisedb.com
The usefulness of a cup is in its emptiness, Bruce Lee
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-25 04:44 Michael Paquier <michael@paquier.xyz>
parent: Bruce Momjian <bruce@momjian.us>
0 siblings, 2 replies; 28+ messages in thread
From: Michael Paquier @ 2020-08-25 04:44 UTC (permalink / raw)
To: Bruce Momjian <bruce@momjian.us>; +Cc: Alvaro Herrera <alvherre@2ndquadrant.com>; Tom Lane <tgl@sss.pgh.pa.us>; osdba <mailtch@163.com>; pgsql-docs
On Mon, Aug 24, 2020 at 12:01:00PM -0400, Bruce Momjian wrote:
> Sure, I can wait. Is this the only place where it would make sense?
I think so. If there are other places, it does not prevent improving
what we already know needs improvement.
FWIW, the layout I was thinking about is something like the patch
attached. I have only patched GIN to give an idea of the shape of the
tables. The PNG file attached is a screenshot of the HTML generated.
I know that we try to limit the use of morerows, but it seems much
better to me to use morerows for those pages here knowing the small
size of the tables. We could split that into multiple tables instead,
still I find the single-table approach cleaner.
--
Michael
Attachments:
gin_ops_doc.png (image/png, 80.2K) download
view image
doc-gin-opr-table.patch (text/x-diff, 2.9K) download
diff --git a/doc/src/sgml/gin.sgml b/doc/src/sgml/gin.sgml
index 2d862669c3..6fee0280be 100644
--- a/doc/src/sgml/gin.sgml
+++ b/doc/src/sgml/gin.sgml
@@ -85,43 +85,57 @@
</thead>
<tbody>
<row>
- <entry><literal>array_ops</literal></entry>
- <entry><type>anyarray</type></entry>
- <entry>
- <literal>&&</literal>
- <literal><@</literal>
- <literal>=</literal>
- <literal>@></literal>
- </entry>
+ <entry morerows="3"><literal>array_ops</literal></entry>
+ <entry morerows="3"><type>anyarray</type></entry>
+ <entry><literal>&&(anyarray,anyarray)</literal></entry>
</row>
<row>
- <entry><literal>jsonb_ops</literal></entry>
- <entry><type>jsonb</type></entry>
- <entry>
- <literal>?</literal>
- <literal>?&</literal>
- <literal>?|</literal>
- <literal>@></literal>
- <literal>@?</literal>
- <literal>@@</literal>
- </entry>
+ <entry><literal>@>(anyarray,anyarray)</literal></entry>
</row>
<row>
- <entry><literal>jsonb_path_ops</literal></entry>
- <entry><type>jsonb</type></entry>
- <entry>
- <literal>@></literal>
- <literal>@?</literal>
- <literal>@@</literal>
- </entry>
+ <entry><literal><@(anyarray,anyarray)</literal></entry>
</row>
<row>
- <entry><literal>tsvector_ops</literal></entry>
- <entry><type>tsvector</type></entry>
- <entry>
- <literal>@@</literal>
- <literal>@@@</literal>
- </entry>
+ <entry><literal>=(anyarray,anyarray)</literal></entry>
+ </row>
+ <row>
+ <entry morerows="5"><literal>jsonb_ops</literal></entry>
+ <entry morerows="5"><type>jsonb</type></entry>
+ <entry><literal>@>(jsonb,jsonb)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>@?(jsonb,jsonpath)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>@@(jsonb,jsonpath)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>?(jsonb,text)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>?|(jsonb,text[])</literal></entry>
+ </row>
+ <row>
+ <entry><literal>?&(jsonb,text[])</literal></entry>
+ </row>
+ <row>
+ <entry morerows="2"><literal>jsonb_path_ops</literal></entry>
+ <entry morerows="2"><type>jsonb</type></entry>
+ <entry><literal>@>(jsonb,jsonb)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>@?(jsonb,jsonpath)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>@@(jsonb,jsonpath)</literal></entry>
+ </row>
+ <row>
+ <entry morerows="1"><literal>tsvector_ops</literal></entry>
+ <entry morerows="1"><type>tsvector</type></entry>
+ <entry><literal>@@(tsvector,tsquery)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>@@@(tsvector,tsquery)</literal></entry>
</row>
</tbody>
</tgroup>
signature.asc (application/pgp-signature, 832B) download
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-25 14:06 Bruce Momjian <bruce@momjian.us>
parent: Michael Paquier <michael@paquier.xyz>
1 sibling, 0 replies; 28+ messages in thread
From: Bruce Momjian @ 2020-08-25 14:06 UTC (permalink / raw)
To: Michael Paquier <michael@paquier.xyz>; +Cc: Alvaro Herrera <alvherre@2ndquadrant.com>; Tom Lane <tgl@sss.pgh.pa.us>; osdba <mailtch@163.com>; pgsql-docs
On Tue, Aug 25, 2020 at 01:44:03PM +0900, Michael Paquier wrote:
> On Mon, Aug 24, 2020 at 12:01:00PM -0400, Bruce Momjian wrote:
> > Sure, I can wait. Is this the only place where it would make sense?
>
> I think so. If there are other places, it does not prevent improving
> what we already know needs improvement.
Well, my point is that if this area looks different from other places,
it could look odd, so we can't always make incremental fixes to the
docs, though it might be fine in this case.
--
Bruce Momjian <bruce@momjian.us> https://momjian.us
EnterpriseDB https://enterprisedb.com
The usefulness of a cup is in its emptiness, Bruce Lee
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-25 22:10 Alvaro Herrera <alvherre@2ndquadrant.com>
parent: Michael Paquier <michael@paquier.xyz>
1 sibling, 1 reply; 28+ messages in thread
From: Alvaro Herrera @ 2020-08-25 22:10 UTC (permalink / raw)
To: Michael Paquier <michael@paquier.xyz>; +Cc: Bruce Momjian <bruce@momjian.us>; Tom Lane <tgl@sss.pgh.pa.us>; osdba <mailtch@163.com>; pgsql-docs
On 2020-Aug-25, Michael Paquier wrote:
> I think so. If there are other places, it does not prevent improving
> what we already know needs improvement.
>
> FWIW, the layout I was thinking about is something like the patch
> attached.
This looks to me enough of an improvement that I +1 it, and yes this is
what I was imagining also.
(With the non-website stylesheet, as in the screenshot you showed, the
table looks somewhat crammed and visually unappealing; but the website
stylesheet looks pleasing enough. Screenshot attached.)
> I have only patched GIN to give an idea of the shape of the
> tables.
I suppose a commit would change all the index AMs where we document this
kind of thing.
--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Attachments:
gin-opclasses.png (image/png, 43.0K) download
view image
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-25 22:17 Tom Lane <tgl@sss.pgh.pa.us>
parent: Alvaro Herrera <alvherre@2ndquadrant.com>
0 siblings, 1 reply; 28+ messages in thread
From: Tom Lane @ 2020-08-25 22:17 UTC (permalink / raw)
To: Alvaro Herrera <alvherre@2ndquadrant.com>; +Cc: Michael Paquier <michael@paquier.xyz>; Bruce Momjian <bruce@momjian.us>; osdba <mailtch@163.com>; pgsql-docs
Alvaro Herrera <alvherre@2ndquadrant.com> writes:
> On 2020-Aug-25, Michael Paquier wrote:
>> FWIW, the layout I was thinking about is something like the patch
>> attached.
> This looks to me enough of an improvement that I +1 it, and yes this is
> what I was imagining also.
I think it's a good idea too.
> (With the non-website stylesheet, as in the screenshot you showed, the
> table looks somewhat crammed and visually unappealing; but the website
> stylesheet looks pleasing enough. Screenshot attached.)
I wonder if it would look better if we suppress the horizontal rules
between the operator names within a cell. IIRC, it's possible to do
that, though the exact incantation isn't coming to mind right now.
> I suppose a commit would change all the index AMs where we document this
> kind of thing.
Yeah, we should make all these sorts of tables consistent.
regards, tom lane
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-26 06:56 Michael Paquier <michael@paquier.xyz>
parent: Tom Lane <tgl@sss.pgh.pa.us>
0 siblings, 1 reply; 28+ messages in thread
From: Michael Paquier @ 2020-08-26 06:56 UTC (permalink / raw)
To: Tom Lane <tgl@sss.pgh.pa.us>; +Cc: Alvaro Herrera <alvherre@2ndquadrant.com>; Bruce Momjian <bruce@momjian.us>; osdba <mailtch@163.com>; pgsql-docs
On Tue, Aug 25, 2020 at 06:17:28PM -0400, Tom Lane wrote:
> Alvaro Herrera <alvherre@2ndquadrant.com> writes:
>> (With the non-website stylesheet, as in the screenshot you showed, the
>> table looks somewhat crammed and visually unappealing; but the website
>> stylesheet looks pleasing enough. Screenshot attached.)
Right, STYLE=website.
> I wonder if it would look better if we suppress the horizontal rules
> between the operator names within a cell. IIRC, it's possible to do
> that, though the exact incantation isn't coming to mind right now.
I would imagine that rowsep=0 for a given <entry> can do that:
https://tdg.docbook.org/tdg/4.5/entry.html
However, it does not make a difference if I use the default style or
the website style. I may be missing something with the stylesheet
though?
>> I suppose a commit would change all the index AMs where we document this
>> kind of thing.
>
> Yeah, we should make all these sorts of tables consistent.
Of course, just wanted to make sure that we agree on the layer before
spending more time on that as shaping all the tables correctly is a
lot of work. And GIN is the smallest one.
One thing to note about the BRIN table is that we have never
documented from the start any of the operators working across multiple
types. For example, we only have 5 operators listed for each one of
int2/int4/int8, timestamptz/timestamp or real/float, but these are
listed with incorrect names and they miss a bunch of other operators
able to handle combinations of (int2,int4), etc. So I have fixed the
table so as all the operators are listed, grouping together ints,
timestamps and reals, as \dAo says. Now there could be also an
argument to stick with simplicity and list only the operators of one
single type, reducing the size of the table for BRIN. But that would
be incorrect with the catalogs, and the attached classifies all
operators in alphabetical order. (Switching to the original list is
not complicated as that would be just removing code from the attached,
so I took the complicated path for now.)
--
Michael
Attachments:
doc-builtin-ops.patch (text/x-diff, 53.6K) download
diff --git a/doc/src/sgml/brin.sgml b/doc/src/sgml/brin.sgml
index b9d596e3c4..341fe8e021 100644
--- a/doc/src/sgml/brin.sgml
+++ b/doc/src/sgml/brin.sgml
@@ -133,341 +133,357 @@ LOG: request for BRIN range summarization for index "brin_wi_idx" page 128 was
</thead>
<tbody>
<row>
- <entry><literal>int8_minmax_ops</literal></entry>
- <entry><type>bigint</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>bit_minmax_ops</literal></entry>
+ <entry morerows="4"><type>bit</type></entry>
+ <entry><literal>=(bit,bit)</literal></entry>
</row>
+ <row><entry><literal><(bit,bit)</literal></entry></row>
+ <row><entry><literal>>(bit,bit)</literal></entry></row>
+ <row><entry><literal><=(bit,bit)</literal></entry></row>
+ <row><entry><literal>>=(bit,bit)</literal></entry></row>
+
<row>
- <entry><literal>bit_minmax_ops</literal></entry>
- <entry><type>bit</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="12"><literal>box_inclusion_ops</literal></entry>
+ <entry morerows="12"><type>box</type></entry>
+ <entry><literal>@>(box,point)</literal></entry>
</row>
+ <row><entry><literal><<(box,box)</literal></entry></row>
+ <row><entry><literal>&<(box,box)</literal></entry></row>
+ <row><entry><literal>&>(box,box)</literal></entry></row>
+ <row><entry><literal>>>(box,box)</literal></entry></row>
+ <row><entry><literal><@(box,box)</literal></entry></row>
+ <row><entry><literal>@>(box,box)</literal></entry></row>
+ <row><entry><literal>~=(box,box)</literal></entry></row>
+ <row><entry><literal>&&(box,box)</literal></entry></row>
+ <row><entry><literal><<|(box,box)</literal></entry></row>
+ <row><entry><literal>&<|(box,box)</literal></entry></row>
+ <row><entry><literal>|&>(box,box)</literal></entry></row>
+ <row><entry><literal>|>>(box,box)</literal></entry></row>
+
<row>
- <entry><literal>varbit_minmax_ops</literal></entry>
- <entry><type>bit varying</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>bpchar_minmax_ops</literal></entry>
+ <entry morerows="4"><type>character</type></entry>
+ <entry><literal>=(character,character)</literal></entry>
</row>
+ <row><entry><literal><(character,character)</literal></entry></row>
+ <row><entry><literal><=(character,character)</literal></entry></row>
+ <row><entry><literal>>(character,character)</literal></entry></row>
+ <row><entry><literal>>=(character,character)</literal></entry></row>
+
<row>
- <entry><literal>box_inclusion_ops</literal></entry>
- <entry><type>box</type></entry>
- <entry>
- <literal><<</literal>
- <literal>&<</literal>
- <literal>&&</literal>
- <literal>&></literal>
- <literal>>></literal>
- <literal>~=</literal>
- <literal>@></literal>
- <literal><@</literal>
- <literal>&<|</literal>
- <literal><<|</literal>
- <literal>|>></literal>
- <literal>|&></literal>
- </entry>
+ <entry morerows="4"><literal>bytea_minmax_ops</literal></entry>
+ <entry morerows="4"><type>bytea</type></entry>
+ <entry><literal>=(bytea,bytea)</literal></entry>
</row>
+ <row><entry><literal><(bytea,bytea)</literal></entry></row>
+ <row><entry><literal><=(bytea,bytea)</literal></entry></row>
+ <row><entry><literal>>(bytea,bytea)</literal></entry></row>
+ <row><entry><literal>>=(bytea,bytea)</literal></entry></row>
+
<row>
- <entry><literal>bytea_minmax_ops</literal></entry>
- <entry><type>bytea</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>char_minmax_ops</literal></entry>
+ <entry morerows="4"><type>"char"</type></entry>
+ <entry><literal>=("char","char")</literal></entry>
</row>
+ <row><entry><literal><("char","char")</literal></entry></row>
+ <row><entry><literal><=("char","char")</literal></entry></row>
+ <row><entry><literal>>("char","char")</literal></entry></row>
+ <row><entry><literal>>=("char","char")</literal></entry></row>
+
<row>
- <entry><literal>bpchar_minmax_ops</literal></entry>
- <entry><type>character</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="44"><literal>datetime_minmax_ops</literal></entry>
+ <entry morerows="44"><type>date</type>, <type>timestamp with time zone</type>, <type>timestamp without time zone</type></entry>
+ <entry><literal>=(date,date)</literal></entry>
</row>
+ <row><entry><literal><(date,date)</literal></entry></row>
+ <row><entry><literal><=(date,date)</literal></entry></row>
+ <row><entry><literal>>(date,date)</literal></entry></row>
+ <row><entry><literal>>=(date,date)</literal></entry></row>
+ <row><entry><literal>=(timestamp with time zone,timestamp with time zone)</literal></entry></row>
+ <row><entry><literal><(timestamp with time zone,timestamp with time zone)</literal></entry></row>
+ <row><entry><literal><=(timestamp with time zone,timestamp with time zone)</literal></entry></row>
+ <row><entry><literal>>(timestamp with time zone,timestamp with time zone)</literal></entry></row>
+ <row><entry><literal>>=(timestamp with time zone,timestamp with time zone)</literal></entry></row>
+ <row><entry><literal>=(timestamp without time zone,timestamp without time zone)</literal></entry></row>
+ <row><entry><literal><(timestamp without time zone,timestamp without time zone)</literal></entry></row>
+ <row><entry><literal><=(timestamp without time zone,timestamp without time zone)</literal></entry></row>
+ <row><entry><literal>>(timestamp without time zone,timestamp without time zone)</literal></entry></row>
+ <row><entry><literal>>=(timestamp without time zone,timestamp without time zone)</literal></entry></row>
+ <row><entry><literal><(date,timestamp without time zone)</literal></entry></row>
+ <row><entry><literal><=(date,timestamp without time zone)</literal></entry></row>
+ <row><entry><literal>=(date,timestamp without time zone)</literal></entry></row>
+ <row><entry><literal>>=(date,timestamp without time zone)</literal></entry></row>
+ <row><entry><literal>>(date,timestamp without time zone)</literal></entry></row>
+ <row><entry><literal><(date,timestamp with time zone)</literal></entry></row>
+ <row><entry><literal><=(date,timestamp with time zone)</literal></entry></row>
+ <row><entry><literal>=(date,timestamp with time zone)</literal></entry></row>
+ <row><entry><literal>>=(date,timestamp with time zone)</literal></entry></row>
+ <row><entry><literal>>(date,timestamp with time zone)</literal></entry></row>
+ <row><entry><literal><(timestamp without time zone,date)</literal></entry></row>
+ <row><entry><literal><=(timestamp without time zone,date)</literal></entry></row>
+ <row><entry><literal>=(timestamp without time zone,date)</literal></entry></row>
+ <row><entry><literal>>=(timestamp without time zone,date)</literal></entry></row>
+ <row><entry><literal>>(timestamp without time zone,date)</literal></entry></row>
+ <row><entry><literal><(timestamp with time zone,date)</literal></entry></row>
+ <row><entry><literal><=(timestamp with time zone,date)</literal></entry></row>
+ <row><entry><literal>=(timestamp with time zone,date)</literal></entry></row>
+ <row><entry><literal>>=(timestamp with time zone,date)</literal></entry></row>
+ <row><entry><literal>>(timestamp with time zone,date)</literal></entry></row>
+ <row><entry><literal><(timestamp without time zone,timestamp with time zone)</literal></entry></row>
+ <row><entry><literal><=(timestamp without time zone,timestamp with time zone)</literal></entry></row>
+ <row><entry><literal>=(timestamp without time zone,timestamp with time zone)</literal></entry></row>
+ <row><entry><literal>>=(timestamp without time zone,timestamp with time zone)</literal></entry></row>
+ <row><entry><literal>>(timestamp without time zone,timestamp with time zone)</literal></entry></row>
+ <row><entry><literal><(timestamp with time zone,timestamp without time zone)</literal></entry></row>
+ <row><entry><literal><=(timestamp with time zone,timestamp without time zone)</literal></entry></row>
+ <row><entry><literal>=(timestamp with time zone,timestamp without time zone)</literal></entry></row>
+ <row><entry><literal>>=(timestamp with time zone,timestamp without time zone)</literal></entry></row>
+ <row><entry><literal>>(timestamp with time zone,timestamp without time zone)</literal></entry></row>
+
<row>
- <entry><literal>char_minmax_ops</literal></entry>
- <entry><type>"char"</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="19"><literal>float_minmax_ops</literal></entry>
+ <entry morerows="19"><type>double precision</type>, <type>real</type></entry>
+ <entry><literal>=(real,real)</literal></entry>
</row>
+ <row><entry><literal><(real,real)</literal></entry></row>
+ <row><entry><literal>>(real,real)</literal></entry></row>
+ <row><entry><literal><=(real,real)</literal></entry></row>
+ <row><entry><literal>>=(real,real)</literal></entry></row>
+ <row><entry><literal>=(double precision,double precision)</literal></entry></row>
+ <row><entry><literal><(double precision,double precision)</literal></entry></row>
+ <row><entry><literal><=(double precision,double precision)</literal></entry></row>
+ <row><entry><literal>>(double precision,double precision)</literal></entry></row>
+ <row><entry><literal>>=(double precision,double precision)</literal></entry></row>
+ <row><entry><literal>=(real,double precision)</literal></entry></row>
+ <row><entry><literal><(real,double precision)</literal></entry></row>
+ <row><entry><literal>>(real,double precision)</literal></entry></row>
+ <row><entry><literal><=(real,double precision)</literal></entry></row>
+ <row><entry><literal>>=(real,double precision)</literal></entry></row>
+ <row><entry><literal>=(double precision,real)</literal></entry></row>
+ <row><entry><literal><(double precision,real)</literal></entry></row>
+ <row><entry><literal>>(double precision,real)</literal></entry></row>
+ <row><entry><literal><=(double precision,real)</literal></entry></row>
+ <row><entry><literal>>=(double precision,real)</literal></entry></row>
+
<row>
- <entry><literal>date_minmax_ops</literal></entry>
- <entry><type>date</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="44"><literal>integer_minmax_ops</literal></entry>
+ <entry morerows="44"><type>smallint</type>, <type>integer</type>, <type>bigint</type></entry>
+ <entry><literal>=(integer,bigint)</literal></entry>
</row>
+ <row><entry><literal><(integer,bigint)</literal></entry></row>
+ <row><entry><literal>>(integer,bigint)</literal></entry></row>
+ <row><entry><literal><=(integer,bigint)</literal></entry></row>
+ <row><entry><literal>>=(integer,bigint)</literal></entry></row>
+ <row><entry><literal>=(smallint,smallint)</literal></entry></row>
+ <row><entry><literal><(smallint,smallint)</literal></entry></row>
+ <row><entry><literal>=(integer,integer)</literal></entry></row>
+ <row><entry><literal><(integer,integer)</literal></entry></row>
+ <row><entry><literal>=(bigint,bigint)</literal></entry></row>
+ <row><entry><literal><(bigint,bigint)</literal></entry></row>
+ <row><entry><literal>>(bigint,bigint)</literal></entry></row>
+ <row><entry><literal><=(bigint,bigint)</literal></entry></row>
+ <row><entry><literal>>=(bigint,bigint)</literal></entry></row>
+ <row><entry><literal>=(bigint,integer)</literal></entry></row>
+ <row><entry><literal><(bigint,integer)</literal></entry></row>
+ <row><entry><literal>>(bigint,integer)</literal></entry></row>
+ <row><entry><literal><=(bigint,integer)</literal></entry></row>
+ <row><entry><literal>>=(bigint,integer)</literal></entry></row>
+ <row><entry><literal>>(smallint,smallint)</literal></entry></row>
+ <row><entry><literal>>(integer,integer)</literal></entry></row>
+ <row><entry><literal><=(smallint,smallint)</literal></entry></row>
+ <row><entry><literal><=(integer,integer)</literal></entry></row>
+ <row><entry><literal>>=(smallint,smallint)</literal></entry></row>
+ <row><entry><literal>>=(integer,integer)</literal></entry></row>
+ <row><entry><literal>=(smallint,integer)</literal></entry></row>
+ <row><entry><literal>=(integer,smallint)</literal></entry></row>
+ <row><entry><literal><(smallint,integer)</literal></entry></row>
+ <row><entry><literal><(integer,smallint)</literal></entry></row>
+ <row><entry><literal>>(smallint,integer)</literal></entry></row>
+ <row><entry><literal>>(integer,smallint)</literal></entry></row>
+ <row><entry><literal><=(smallint,integer)</literal></entry></row>
+ <row><entry><literal><=(integer,smallint)</literal></entry></row>
+ <row><entry><literal>>=(smallint,integer)</literal></entry></row>
+ <row><entry><literal>>=(integer,smallint)</literal></entry></row>
+ <row><entry><literal>=(smallint,bigint)</literal></entry></row>
+ <row><entry><literal><(smallint,bigint)</literal></entry></row>
+ <row><entry><literal>>(smallint,bigint)</literal></entry></row>
+ <row><entry><literal><=(smallint,bigint)</literal></entry></row>
+ <row><entry><literal>>=(smallint,bigint)</literal></entry></row>
+ <row><entry><literal>=(bigint,smallint)</literal></entry></row>
+ <row><entry><literal><(bigint,smallint)</literal></entry></row>
+ <row><entry><literal>>(bigint,smallint)</literal></entry></row>
+ <row><entry><literal><=(bigint,smallint)</literal></entry></row>
+ <row><entry><literal>>=(bigint,smallint)</literal></entry></row>
+
<row>
- <entry><literal>float8_minmax_ops</literal></entry>
- <entry><type>double precision</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>interval_minmax_ops</literal></entry>
+ <entry morerows="4"><type>interval</type></entry>
+ <entry><literal>=(interval,interval)</literal></entry>
</row>
+ <row><entry><literal><(interval,interval)</literal></entry></row>
+ <row><entry><literal><=(interval,interval)</literal></entry></row>
+ <row><entry><literal>>(interval,interval)</literal></entry></row>
+ <row><entry><literal>>=(interval,interval)</literal></entry></row>
+
<row>
- <entry><literal>inet_minmax_ops</literal></entry>
- <entry><type>inet</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>maxaddr8_minmax_ops</literal></entry>
+ <entry morerows="4"><type>macaddr8</type></entry>
+ <entry><literal>=(macaddr8,macaddr8)</literal></entry>
</row>
+ <row><entry><literal><(macaddr8,macaddr8)</literal></entry></row>
+ <row><entry><literal><=(macaddr8,macaddr8)</literal></entry></row>
+ <row><entry><literal>>(macaddr8,macaddr8)</literal></entry></row>
+ <row><entry><literal>>=(macaddr8,macaddr8)</literal></entry></row>
+
<row>
- <entry><literal>network_inclusion_ops</literal></entry>
- <entry><type>inet</type></entry>
- <entry>
- <literal>&&</literal>
- <literal>>>=</literal>
- <literal><<=</literal>
- <literal>=</literal>
- <literal>>></literal>
- <literal><<</literal>
- </entry>
+ <entry morerows="4"><literal>maxaddr_minmax_ops</literal></entry>
+ <entry morerows="4"><type>macaddr</type></entry>
+ <entry><literal>=(macaddr,macaddr)</literal></entry>
</row>
+ <row><entry><literal><(macaddr,macaddr)</literal></entry></row>
+ <row><entry><literal><=(macaddr,macaddr)</literal></entry></row>
+ <row><entry><literal>>(macaddr,macaddr)</literal></entry></row>
+ <row><entry><literal>>=(macaddr,macaddr)</literal></entry></row>
+
<row>
- <entry><literal>int4_minmax_ops</literal></entry>
- <entry><type>integer</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>name_minmax_ops</literal></entry>
+ <entry morerows="4"><type>name</type></entry>
+ <entry><literal>=(name,name)</literal></entry>
</row>
+ <row><entry><literal><(name,name)</literal></entry></row>
+ <row><entry><literal><=(name,name)</literal></entry></row>
+ <row><entry><literal>>(name,name)</literal></entry></row>
+ <row><entry><literal>>=(name,name)</literal></entry></row>
+
<row>
- <entry><literal>interval_minmax_ops</literal></entry>
- <entry><type>interval</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="5"><literal>network_inclusion_ops</literal></entry>
+ <entry morerows="5"><type>inet</type></entry>
+ <entry><literal><<(inet,inet)</literal></entry>
</row>
+ <row><entry><literal><<=(inet,inet)</literal></entry></row>
+ <row><entry><literal>>>(inet,inet)</literal></entry></row>
+ <row><entry><literal>>>=(inet,inet)</literal></entry></row>
+ <row><entry><literal>=(inet,inet)</literal></entry></row>
+ <row><entry><literal>&&(inet,inet)</literal></entry></row>
+
<row>
- <entry><literal>macaddr_minmax_ops</literal></entry>
- <entry><type>macaddr</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>network_minmax_ops</literal></entry>
+ <entry morerows="4"><type>inet</type></entry>
+ <entry><literal>=(inet,inet)</literal></entry>
</row>
+ <row><entry><literal><(inet,inet)</literal></entry></row>
+ <row><entry><literal><=(inet,inet)</literal></entry></row>
+ <row><entry><literal>>(inet,inet)</literal></entry></row>
+ <row><entry><literal>>=(inet,inet)</literal></entry></row>
+
<row>
- <entry><literal>macaddr8_minmax_ops</literal></entry>
- <entry><type>macaddr8</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>numeric_minmax_ops</literal></entry>
+ <entry morerows="4"><type>numeric</type></entry>
+ <entry><literal>=(numeric,numeric)</literal></entry>
</row>
+ <row><entry><literal><(numeric,numeric)</literal></entry></row>
+ <row><entry><literal><=(numeric,numeric)</literal></entry></row>
+ <row><entry><literal>>(numeric,numeric)</literal></entry></row>
+ <row><entry><literal>>=(numeric,numeric)</literal></entry></row>
+
<row>
- <entry><literal>name_minmax_ops</literal></entry>
- <entry><type>name</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>oid_minmax_ops</literal></entry>
+ <entry morerows="4"><type>oid</type></entry>
+ <entry><literal>=(oid,oid)</literal></entry>
</row>
+ <row><entry><literal><(oid,oid)</literal></entry></row>
+ <row><entry><literal>>(oid,oid)</literal></entry></row>
+ <row><entry><literal><=(oid,oid)</literal></entry></row>
+ <row><entry><literal>>=(oid,oid)</literal></entry></row>
+
<row>
- <entry><literal>numeric_minmax_ops</literal></entry>
- <entry><type>numeric</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>pg_lsn_minmax_ops</literal></entry>
+ <entry morerows="4"><type>pg_lsn</type></entry>
+ <entry><literal>=(pg_lsn,pg_lsn)</literal></entry>
</row>
+ <row><entry><literal><(pg_lsn,pg_lsn)</literal></entry></row>
+ <row><entry><literal>>(pg_lsn,pg_lsn)</literal></entry></row>
+ <row><entry><literal><=(pg_lsn,pg_lsn)</literal></entry></row>
+ <row><entry><literal>>=(pg_lsn,pg_lsn)</literal></entry></row>
+
<row>
- <entry><literal>pg_lsn_minmax_ops</literal></entry>
- <entry><type>pg_lsn</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="13"><literal>range_inclusion_ops</literal></entry>
+ <entry morerows="13"><type>any range type</type></entry>
+ <entry><literal>=(anyrange,anyrange)</literal></entry>
</row>
+ <row><entry><literal><(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal><=(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>>=(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>>(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>&&(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>@>(anyrange,anyelement)</literal></entry></row>
+ <row><entry><literal>@>(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal><@(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal><<(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>>>(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>&<(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>&>(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>-|-(anyrange,anyrange)</literal></entry></row>
+
<row>
- <entry><literal>oid_minmax_ops</literal></entry>
- <entry><type>oid</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>text_minmax_ops</literal></entry>
+ <entry morerows="4"><type>text</type></entry>
+ <entry><literal>=(text,text)</literal></entry>
</row>
+ <row><entry><literal><(text,text)</literal></entry></row>
+ <row><entry><literal><=(text,text)</literal></entry></row>
+ <row><entry><literal>>(text,text)</literal></entry></row>
+ <row><entry><literal>>=(text,text)</literal></entry></row>
+
<row>
- <entry><literal>range_inclusion_ops</literal></entry>
- <entry><type>any range type</type></entry>
- <entry>
- <literal><<</literal>
- <literal>&<</literal>
- <literal>&&</literal>
- <literal>&></literal>
- <literal>>></literal>
- <literal>@></literal>
- <literal><@</literal>
- <literal>-|-</literal>
- <literal>=</literal>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>></literal>
- <literal>>=</literal>
- </entry>
+ <entry morerows="4"><literal>tid_minmax_ops</literal></entry>
+ <entry morerows="4"><type>tid</type></entry>
+ <entry><literal>=(tid,tid)</literal></entry>
</row>
+ <row><entry><literal><(tid,tid)</literal></entry></row>
+ <row><entry><literal>>(tid,tid)</literal></entry></row>
+ <row><entry><literal><=(tid,tid)</literal></entry></row>
+ <row><entry><literal>>=(tid,tid)</literal></entry></row>
+
<row>
- <entry><literal>float4_minmax_ops</literal></entry>
- <entry><type>real</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>time_minmax_ops</literal></entry>
+ <entry morerows="4"><type>time without time zone</type></entry>
+ <entry><literal>=(time without time zone,time without time zone)</literal></entry>
</row>
+ <row><entry><literal><(time without time zone,time without time zone)</literal></entry></row>
+ <row><entry><literal><=(time without time zone,time without time zone)</literal></entry></row>
+ <row><entry><literal>>(time without time zone,time without time zone)</literal></entry></row>
+ <row><entry><literal>>=(time without time zone,time without time zone)</literal></entry></row>
+
<row>
- <entry><literal>int2_minmax_ops</literal></entry>
- <entry><type>smallint</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>timetz_minmax_ops</literal></entry>
+ <entry morerows="4"><type>time with time zone</type></entry>
+ <entry><literal>=(time with time zone,time with time zone)</literal></entry>
</row>
+ <row><entry><literal><(time with time zone,time with time zone)</literal></entry></row>
+ <row><entry><literal><=(time with time zone,time with time zone)</literal></entry></row>
+ <row><entry><literal>>(time with time zone,time with time zone)</literal></entry></row>
+ <row><entry><literal>>=(time with time zone,time with time zone)</literal></entry></row>
+
<row>
- <entry><literal>text_minmax_ops</literal></entry>
- <entry><type>text</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>uuid_minmax_ops</literal></entry>
+ <entry morerows="4"><type>uuid</type></entry>
+ <entry><literal>=(uuid,uuid)</literal></entry>
</row>
+ <row><entry><literal><(uuid,uuid)</literal></entry></row>
+ <row><entry><literal>>(uuid,uuid)</literal></entry></row>
+ <row><entry><literal><=(uuid,uuid)</literal></entry></row>
+ <row><entry><literal>>=(uuid,uuid)</literal></entry></row>
+
<row>
- <entry><literal>tid_minmax_ops</literal></entry>
- <entry><type>tid</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
- </row>
- <row>
- <entry><literal>timestamp_minmax_ops</literal></entry>
- <entry><type>timestamp without time zone</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
- </row>
- <row>
- <entry><literal>timestamptz_minmax_ops</literal></entry>
- <entry><type>timestamp with time zone</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
- </row>
- <row>
- <entry><literal>time_minmax_ops</literal></entry>
- <entry><type>time without time zone</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
- </row>
- <row>
- <entry><literal>timetz_minmax_ops</literal></entry>
- <entry><type>time with time zone</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
- </row>
- <row>
- <entry><literal>uuid_minmax_ops</literal></entry>
- <entry><type>uuid</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>varbit_minmax_ops</literal></entry>
+ <entry morerows="4"><type>varbit</type></entry>
+ <entry><literal>=(bit varying,bit varying)</literal></entry>
</row>
+ <row><entry><literal><(bit varying,bit varying)</literal></entry></row>
+ <row><entry><literal>>(bit varying,bit varying)</literal></entry></row>
+ <row><entry><literal><=(bit varying,bit varying)</literal></entry></row>
+ <row><entry><literal>>=(bit varying,bit varying)</literal></entry></row>
</tbody>
</tgroup>
</table>
diff --git a/doc/src/sgml/gin.sgml b/doc/src/sgml/gin.sgml
index 2d862669c3..6fee0280be 100644
--- a/doc/src/sgml/gin.sgml
+++ b/doc/src/sgml/gin.sgml
@@ -85,43 +85,57 @@
</thead>
<tbody>
<row>
- <entry><literal>array_ops</literal></entry>
- <entry><type>anyarray</type></entry>
- <entry>
- <literal>&&</literal>
- <literal><@</literal>
- <literal>=</literal>
- <literal>@></literal>
- </entry>
+ <entry morerows="3"><literal>array_ops</literal></entry>
+ <entry morerows="3"><type>anyarray</type></entry>
+ <entry><literal>&&(anyarray,anyarray)</literal></entry>
</row>
<row>
- <entry><literal>jsonb_ops</literal></entry>
- <entry><type>jsonb</type></entry>
- <entry>
- <literal>?</literal>
- <literal>?&</literal>
- <literal>?|</literal>
- <literal>@></literal>
- <literal>@?</literal>
- <literal>@@</literal>
- </entry>
+ <entry><literal>@>(anyarray,anyarray)</literal></entry>
</row>
<row>
- <entry><literal>jsonb_path_ops</literal></entry>
- <entry><type>jsonb</type></entry>
- <entry>
- <literal>@></literal>
- <literal>@?</literal>
- <literal>@@</literal>
- </entry>
+ <entry><literal><@(anyarray,anyarray)</literal></entry>
</row>
<row>
- <entry><literal>tsvector_ops</literal></entry>
- <entry><type>tsvector</type></entry>
- <entry>
- <literal>@@</literal>
- <literal>@@@</literal>
- </entry>
+ <entry><literal>=(anyarray,anyarray)</literal></entry>
+ </row>
+ <row>
+ <entry morerows="5"><literal>jsonb_ops</literal></entry>
+ <entry morerows="5"><type>jsonb</type></entry>
+ <entry><literal>@>(jsonb,jsonb)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>@?(jsonb,jsonpath)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>@@(jsonb,jsonpath)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>?(jsonb,text)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>?|(jsonb,text[])</literal></entry>
+ </row>
+ <row>
+ <entry><literal>?&(jsonb,text[])</literal></entry>
+ </row>
+ <row>
+ <entry morerows="2"><literal>jsonb_path_ops</literal></entry>
+ <entry morerows="2"><type>jsonb</type></entry>
+ <entry><literal>@>(jsonb,jsonb)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>@?(jsonb,jsonpath)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>@@(jsonb,jsonpath)</literal></entry>
+ </row>
+ <row>
+ <entry morerows="1"><literal>tsvector_ops</literal></entry>
+ <entry morerows="1"><type>tsvector</type></entry>
+ <entry><literal>@@(tsvector,tsquery)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>@@@(tsvector,tsquery)</literal></entry>
</row>
</tbody>
</tgroup>
diff --git a/doc/src/sgml/gist.sgml b/doc/src/sgml/gist.sgml
index a505815f4e..0637077f6f 100644
--- a/doc/src/sgml/gist.sgml
+++ b/doc/src/sgml/gist.sgml
@@ -64,146 +64,119 @@
</thead>
<tbody>
<row>
- <entry><literal>box_ops</literal></entry>
- <entry><type>box</type></entry>
- <entry>
- <literal>&&</literal>
- <literal>&></literal>
- <literal>&<</literal>
- <literal>&<|</literal>
- <literal>>></literal>
- <literal><<</literal>
- <literal><<|</literal>
- <literal><@</literal>
- <literal>@></literal>
- <literal>@</literal>
- <literal>|&></literal>
- <literal>|>></literal>
- <literal>~</literal>
- <literal>~=</literal>
- </entry>
- <entry>
- <literal><-></literal>
- </entry>
+ <entry morerows="13"><literal>box_ops</literal></entry>
+ <entry morerows="13"><type>box</type></entry>
+ <entry><literal><<(box,box)</literal></entry>
+ <entry morerows="13"><literal><->(box,point)</literal></entry>
</row>
+ <row><entry><literal>&<(box,box)</literal></entry></row>
+ <row><entry><literal>&&(box,box)</literal></entry></row>
+ <row><entry><literal>&>(box,box)</literal></entry></row>
+ <row><entry><literal>>>(box,box)</literal></entry></row>
+ <row><entry><literal>~=(box,box)</literal></entry></row>
+ <row><entry><literal>@>(box,box)</literal></entry></row>
+ <row><entry><literal><@(box,box)</literal></entry></row>
+ <row><entry><literal>&<|(box,box)</literal></entry></row>
+ <row><entry><literal><<|(box,box)</literal></entry></row>
+ <row><entry><literal>|>>(box,box)</literal></entry></row>
+ <row><entry><literal>|&>(box,box)</literal></entry></row>
+ <row><entry><literal>~(box,box)</literal></entry></row>
+ <row><entry><literal>@(box,box)</literal></entry></row>
<row>
- <entry><literal>circle_ops</literal></entry>
- <entry><type>circle</type></entry>
- <entry>
- <literal>&&</literal>
- <literal>&></literal>
- <literal>&<</literal>
- <literal>&<|</literal>
- <literal>>></literal>
- <literal><<</literal>
- <literal><<|</literal>
- <literal><@</literal>
- <literal>@></literal>
- <literal>@</literal>
- <literal>|&></literal>
- <literal>|>></literal>
- <literal>~</literal>
- <literal>~=</literal>
- </entry>
- <entry>
- <literal><-></literal>
- </entry>
+ <entry morerows="13"><literal>circle_ops</literal></entry>
+ <entry morerows="13"><type>circle</type></entry>
+ <entry><literal><<(circle,circle)</literal></entry>
+ <entry morerows="13"><literal><->(circle,point)</literal></entry>
</row>
+ <row><entry><literal>&<(circle,circle)</literal></entry></row>
+ <row><entry><literal>&>(circle,circle)</literal></entry></row>
+ <row><entry><literal>>>(circle,circle)</literal></entry></row>
+ <row><entry><literal><@(circle,circle)</literal></entry></row>
+ <row><entry><literal>@>(circle,circle)</literal></entry></row>
+ <row><entry><literal>~=(circle,circle)</literal></entry></row>
+ <row><entry><literal>&&(circle,circle)</literal></entry></row>
+ <row><entry><literal>|>>(circle,circle)</literal></entry></row>
+ <row><entry><literal><<|(circle,circle)</literal></entry></row>
+ <row><entry><literal>&<|(circle,circle)</literal></entry></row>
+ <row><entry><literal>|&>(circle,circle)</literal></entry></row>
+ <row><entry><literal>@(circle,circle)</literal></entry></row>
+ <row><entry><literal>~(circle,circle)</literal></entry></row>
<row>
- <entry><literal>inet_ops</literal></entry>
- <entry><type>inet</type>, <type>cidr</type></entry>
- <entry>
- <literal>&&</literal>
- <literal>>></literal>
- <literal>>>=</literal>
- <literal>></literal>
- <literal>>=</literal>
- <literal><></literal>
- <literal><<</literal>
- <literal><<=</literal>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- </entry>
- <entry>
- </entry>
+ <entry morerows="10"><literal>inet_ops</literal></entry>
+ <entry morerows="10"><type>inet</type>, <type>cidr</type></entry>
+ <entry><literal><<(inet,inet)</literal></entry>
+ <entry morerows="10"></entry>
</row>
+ <row><entry><literal><<=(inet,inet)</literal></entry></row>
+ <row><entry><literal>>>(inet,inet)</literal></entry></row>
+ <row><entry><literal>>>=(inet,inet)</literal></entry></row>
+ <row><entry><literal>=(inet,inet)</literal></entry></row>
+ <row><entry><literal><>(inet,inet)</literal></entry></row>
+ <row><entry><literal><(inet,inet)</literal></entry></row>
+ <row><entry><literal><=(inet,inet)</literal></entry></row>
+ <row><entry><literal>>(inet,inet)</literal></entry></row>
+ <row><entry><literal>>=(inet,inet)</literal></entry></row>
+ <row><entry><literal>&&(inet,inet)</literal></entry></row>
<row>
- <entry><literal>point_ops</literal></entry>
- <entry><type>point</type></entry>
- <entry>
- <literal>>></literal>
- <literal>>^</literal>
- <literal><<</literal>
- <literal><@</literal>
- <literal><@</literal>
- <literal><@</literal>
- <literal><^</literal>
- <literal>~=</literal>
- </entry>
- <entry>
- <literal><-></literal>
- </entry>
+ <entry morerows="7"><literal>point_ops</literal></entry>
+ <entry morerows="7"><type>point</type></entry>
+ <entry><literal>>^(point,point)</literal></entry>
+ <entry morerows="7"><literal><->(point,point)</literal></entry>
</row>
+ <row><entry><literal><<(point,point)</literal></entry></row>
+ <row><entry><literal>>>(point,point)</literal></entry></row>
+ <row><entry><literal><^(point,point)</literal></entry></row>
+ <row><entry><literal>~=(point,point)</literal></entry></row>
+ <row><entry><literal><@(point,box)</literal></entry></row>
+ <row><entry><literal><@(point,polygon)</literal></entry></row>
+ <row><entry><literal><@(point,circle)</literal></entry></row>
<row>
- <entry><literal>poly_ops</literal></entry>
- <entry><type>polygon</type></entry>
- <entry>
- <literal>&&</literal>
- <literal>&></literal>
- <literal>&<</literal>
- <literal>&<|</literal>
- <literal>>></literal>
- <literal><<</literal>
- <literal><<|</literal>
- <literal><@</literal>
- <literal>@></literal>
- <literal>@</literal>
- <literal>|&></literal>
- <literal>|>></literal>
- <literal>~</literal>
- <literal>~=</literal>
- </entry>
- <entry>
- <literal><-></literal>
- </entry>
+ <entry morerows="14"><literal>poly_ops</literal></entry>
+ <entry morerows="14"><type>polygon</type></entry>
+ <entry><literal><<(polygon,polygon)</literal></entry>
+ <entry morerows="14"><literal><->(polygon,point)</literal></entry>
</row>
+ <row><entry><literal>&<(polygon,polygon)</literal></entry></row>
+ <row><entry><literal>&>(polygon,polygon)</literal></entry></row>
+ <row><entry><literal>>>(polygon,polygon)</literal></entry></row>
+ <row><entry><literal><@(polygon,polygon)</literal></entry></row>
+ <row><entry><literal>@>(polygon,polygon)</literal></entry></row>
+ <row><entry><literal>~=(polygon,polygon)</literal></entry></row>
+ <row><entry><literal>&&(polygon,polygon)</literal></entry></row>
+ <row><entry><literal><<|(polygon,polygon)</literal></entry></row>
+ <row><entry><literal>&<|(polygon,polygon)</literal></entry></row>
+ <row><entry><literal>|&>(polygon,polygon)</literal></entry></row>
+ <row><entry><literal>|>>(polygon,polygon)</literal></entry></row>
+ <row><entry><literal>@(polygon,polygon)</literal></entry></row>
+ <row><entry><literal>~(polygon,polygon)</literal></entry></row>
+ <row><entry><literal><->(polygon,point)</literal></entry></row>
<row>
- <entry><literal>range_ops</literal></entry>
- <entry>any range type</entry>
- <entry>
- <literal>&&</literal>
- <literal>&></literal>
- <literal>&<</literal>
- <literal>>></literal>
- <literal><<</literal>
- <literal><@</literal>
- <literal>-|-</literal>
- <literal>=</literal>
- <literal>@></literal>
- <literal>@></literal>
- </entry>
- <entry>
- </entry>
+ <entry morerows="9"><literal>range_ops</literal></entry>
+ <entry morerows="9">any range type</entry>
+ <entry><literal>=(anyrange,anyrange)</literal></entry>
+ <entry morerows="9"></entry>
</row>
+ <row><entry><literal>&&(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>@>(anyrange,anyelement)</literal></entry></row>
+ <row><entry><literal>@>(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal><@(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal><<(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>>>(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>&<(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>&>(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>-|-(anyrange,anyrange)</literal></entry></row>
<row>
- <entry><literal>tsquery_ops</literal></entry>
- <entry><type>tsquery</type></entry>
- <entry>
- <literal><@</literal>
- <literal>@></literal>
- </entry>
- <entry>
- </entry>
+ <entry morerows="1"><literal>tsquery_ops</literal></entry>
+ <entry morerows="1"><type>tsquery</type></entry>
+ <entry><literal><@(tsquery,tsquery)</literal></entry>
+ <entry morerows="1"></entry>
</row>
+ <row><entry><literal>@>(tsquery,tsquery)</literal></entry></row>
<row>
<entry><literal>tsvector_ops</literal></entry>
<entry><type>tsvector</type></entry>
- <entry>
- <literal>@@</literal>
- </entry>
- <entry>
- </entry>
+ <entry><literal>@@(tsvector,tsquery)</literal></entry>
+ <entry></entry>
</row>
</tbody>
</tgroup>
diff --git a/doc/src/sgml/spgist.sgml b/doc/src/sgml/spgist.sgml
index b86302e4ef..5d45ef81e0 100644
--- a/doc/src/sgml/spgist.sgml
+++ b/doc/src/sgml/spgist.sgml
@@ -75,131 +75,113 @@
</thead>
<tbody>
<row>
- <entry><literal>kd_point_ops</literal></entry>
- <entry><type>point</type></entry>
- <entry>
- <literal><<</literal>
- <literal><@</literal>
- <literal><^</literal>
- <literal>>></literal>
- <literal>>^</literal>
- <literal>~=</literal>
- </entry>
- <entry>
- <literal><-></literal>
- </entry>
+ <entry morerows="11"><literal>box_ops</literal></entry>
+ <entry morerows="11"><type>box</type></entry>
+ <entry><literal><<(box,box)</literal></entry>
+ <entry morerows="11"><literal><->(box,point)</literal></entry>
</row>
+ <row><entry><literal>&<(box,box)</literal></entry></row>
+ <row><entry><literal>&>(box,box)</literal></entry></row>
+ <row><entry><literal>>>(box,box)</literal></entry></row>
+ <row><entry><literal><@(box,box)</literal></entry></row>
+ <row><entry><literal>@>(box,box)</literal></entry></row>
+ <row><entry><literal>~=(box,box)</literal></entry></row>
+ <row><entry><literal>&&(box,box)</literal></entry></row>
+ <row><entry><literal><<|(box,box)</literal></entry></row>
+ <row><entry><literal>&<|(box,box)</literal></entry></row>
+ <row><entry><literal>|&>(box,box)</literal></entry></row>
+ <row><entry><literal>|>>(box,box)</literal></entry></row>
+
<row>
- <entry><literal>quad_point_ops</literal></entry>
- <entry><type>point</type></entry>
- <entry>
- <literal><<</literal>
- <literal><@</literal>
- <literal><^</literal>
- <literal>>></literal>
- <literal>>^</literal>
- <literal>~=</literal>
- </entry>
- <entry>
- <literal><-></literal>
- </entry>
+ <entry morerows="5"><literal>kd_point_ops</literal></entry>
+ <entry morerows="5"><type>point</type></entry>
+ <entry><literal>>^(point,point)</literal></entry>
+ <entry morerows="5"><literal><->(point,point)</literal></entry>
</row>
+ <row><entry><literal><<(point,point)</literal></entry></row>
+ <row><entry><literal>>>(point,point)</literal></entry></row>
+ <row><entry><literal><^(point,point)</literal></entry></row>
+ <row><entry><literal>~=(point,point)</literal></entry></row>
+ <row><entry><literal><@(point,box)</literal></entry></row>
+
<row>
- <entry><literal>range_ops</literal></entry>
- <entry>any range type</entry>
- <entry>
- <literal>&&</literal>
- <literal>&<</literal>
- <literal>&></literal>
- <literal>-|-</literal>
- <literal><<</literal>
- <literal><@</literal>
- <literal>=</literal>
- <literal>>></literal>
- <literal>@></literal>
- </entry>
- <entry>
- </entry>
+ <entry morerows="10"><literal>network_ops</literal></entry>
+ <entry morerows="10"><type>inet</type>, <type>cidr</type></entry>
+ <entry><literal><<(inet,inet)</literal></entry>
+ <entry morerows="10"></entry>
</row>
+ <row><entry><literal><<=(inet,inet)</literal></entry></row>
+ <row><entry><literal>>>(inet,inet)</literal></entry></row>
+ <row><entry><literal>>>=(inet,inet)</literal></entry></row>
+ <row><entry><literal>=(inet,inet)</literal></entry></row>
+ <row><entry><literal><>(inet,inet)</literal></entry></row>
+ <row><entry><literal><(inet,inet)</literal></entry></row>
+ <row><entry><literal><=(inet,inet)</literal></entry></row>
+ <row><entry><literal>>(inet,inet)</literal></entry></row>
+ <row><entry><literal>>=(inet,inet)</literal></entry></row>
+ <row><entry><literal>&&(inet,inet)</literal></entry></row>
+
<row>
- <entry><literal>box_ops</literal></entry>
- <entry><type>box</type></entry>
- <entry>
- <literal><<</literal>
- <literal>&<</literal>
- <literal>&&</literal>
- <literal>&></literal>
- <literal>>></literal>
- <literal>~=</literal>
- <literal>@></literal>
- <literal><@</literal>
- <literal>&<|</literal>
- <literal><<|</literal>
- <literal>|>></literal>
- <literal>|&></literal>
- </entry>
- <entry>
- <literal><-></literal>
- </entry>
+ <entry morerows="11"><literal>poly_ops</literal></entry>
+ <entry morerows="11"><type>polygon</type></entry>
+ <entry><literal><<(polygon,polygon)</literal></entry>
+ <entry morerows="11"><literal><->(polygon,point)</literal></entry>
</row>
+ <row><entry><literal>&<(polygon,polygon)</literal></entry></row>
+ <row><entry><literal>&>(polygon,polygon)</literal></entry></row>
+ <row><entry><literal>>>(polygon,polygon)</literal></entry></row>
+ <row><entry><literal><@(polygon,polygon)</literal></entry></row>
+ <row><entry><literal>@>(polygon,polygon)</literal></entry></row>
+ <row><entry><literal>~=(polygon,polygon)</literal></entry></row>
+ <row><entry><literal>&&(polygon,polygon)</literal></entry></row>
+ <row><entry><literal><<|(polygon,polygon)</literal></entry></row>
+ <row><entry><literal>&<|(polygon,polygon)</literal></entry></row>
+ <row><entry><literal>|>>(polygon,polygon)</literal></entry></row>
+ <row><entry><literal>|&>(polygon,polygon)</literal></entry></row>
+
<row>
- <entry><literal>poly_ops</literal></entry>
- <entry><type>polygon</type></entry>
- <entry>
- <literal><<</literal>
- <literal>&<</literal>
- <literal>&&</literal>
- <literal>&></literal>
- <literal>>></literal>
- <literal>~=</literal>
- <literal>@></literal>
- <literal><@</literal>
- <literal>&<|</literal>
- <literal><<|</literal>
- <literal>|>></literal>
- <literal>|&></literal>
- </entry>
- <entry>
- <literal><-></literal>
- </entry>
+ <entry morerows="5"><literal>quad_point_ops</literal></entry>
+ <entry morerows="5"><type>point</type></entry>
+ <entry><literal>>^(point,point)</literal></entry>
+ <entry morerows="5"><literal><->(point,point)</literal></entry>
</row>
+ <row><entry><literal><<(point,point)</literal></entry></row>
+ <row><entry><literal>>>(point,point)</literal></entry></row>
+ <row><entry><literal><^(point,point)</literal></entry></row>
+ <row><entry><literal>~=(point,point)</literal></entry></row>
+ <row><entry><literal><@(point,box)</literal></entry></row>
+
<row>
- <entry><literal>text_ops</literal></entry>
- <entry><type>text</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>></literal>
- <literal>>=</literal>
- <literal>~<=~</literal>
- <literal>~<~</literal>
- <literal>~>=~</literal>
- <literal>~>~</literal>
- <literal>^@</literal>
- </entry>
- <entry>
- </entry>
+ <entry morerows="9"><literal>range_ops</literal></entry>
+ <entry morerows="9">any range type</entry>
+ <entry><literal>=(anyrange,anyrange)</literal></entry>
+ <entry morerows="9"></entry>
</row>
+ <row><entry><literal>&&(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>@>(anyrange,anyelement)</literal></entry></row>
+ <row><entry><literal>@>(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal><@(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal><<(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>>>(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>&<(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>&>(anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>-|-(anyrange,anyrange)</literal></entry></row>
+
<row>
- <entry><literal>inet_ops</literal></entry>
- <entry><type>inet</type>, <type>cidr</type></entry>
- <entry>
- <literal>&&</literal>
- <literal>>></literal>
- <literal>>>=</literal>
- <literal>></literal>
- <literal>>=</literal>
- <literal><></literal>
- <literal><<</literal>
- <literal><<=</literal>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- </entry>
- <entry>
- </entry>
+ <entry morerows="9"><literal>text_ops</literal></entry>
+ <entry morerows="9"><type>text</type></entry>
+ <entry><literal>=(text,text)</literal></entry>
+ <entry morerows="9"></entry>
</row>
+ <row><entry><literal><(text,text)</literal></entry></row>
+ <row><entry><literal><=(text,text)</literal></entry></row>
+ <row><entry><literal>>(text,text)</literal></entry></row>
+ <row><entry><literal>>=(text,text)</literal></entry></row>
+ <row><entry><literal>~<~(text,text)</literal></entry></row>
+ <row><entry><literal>~<=~(text,text)</literal></entry></row>
+ <row><entry><literal>~>=~(text,text)</literal></entry></row>
+ <row><entry><literal>~>~(text,text)</literal></entry></row>
+ <row><entry><literal>^@(text,text)</literal></entry></row>
</tbody>
</tgroup>
</table>
signature.asc (application/pgp-signature, 832B) download
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-26 21:58 Alvaro Herrera <alvherre@2ndquadrant.com>
parent: Michael Paquier <michael@paquier.xyz>
0 siblings, 2 replies; 28+ messages in thread
From: Alvaro Herrera @ 2020-08-26 21:58 UTC (permalink / raw)
To: Michael Paquier <michael@paquier.xyz>; +Cc: Tom Lane <tgl@sss.pgh.pa.us>; Bruce Momjian <bruce@momjian.us>; osdba <mailtch@163.com>; pgsql-docs; jkatz@postgresql.org
On 2020-Aug-26, Michael Paquier wrote:
> On Tue, Aug 25, 2020 at 06:17:28PM -0400, Tom Lane wrote:
> > I wonder if it would look better if we suppress the horizontal rules
> > between the operator names within a cell. IIRC, it's possible to do
> > that, though the exact incantation isn't coming to mind right now.
>
> I would imagine that rowsep=0 for a given <entry> can do that:
> https://tdg.docbook.org/tdg/4.5/entry.html
> However, it does not make a difference if I use the default style or
> the website style. I may be missing something with the stylesheet
> though?
I have no idea there. Maybe Jon Katz (CCed) could help you to find an
answer to that question.
> >> I suppose a commit would change all the index AMs where we document this
> >> kind of thing.
> >
> > Yeah, we should make all these sorts of tables consistent.
>
> Of course, just wanted to make sure that we agree on the layer before
> spending more time on that as shaping all the tables correctly is a
> lot of work. And GIN is the smallest one.
Thanks for doing the legwork!
> One thing to note about the BRIN table is that we have never
> documented from the start any of the operators working across multiple
> types. For example, we only have 5 operators listed for each one of
> int2/int4/int8, timestamptz/timestamp or real/float, but these are
> listed with incorrect names and they miss a bunch of other operators
> able to handle combinations of (int2,int4), etc. So I have fixed the
> table so as all the operators are listed, grouping together ints,
> timestamps and reals, as \dAo says.
Well, there is a small problem here ... which is that I misled you with
\dAo ... because that one lists the operators for the opfamilies, not
for the opclasses. And you can't use the opfamily name in CREATE INDEX:
55432 14devel 30811=# create index on t using brin (a integer_minmax_ops);
ERROR: operator class "integer_minmax_ops" does not exist for access method "brin"
You have to use the opclass name:
55432 14devel 30811=# create index on t using brin (a int4_minmax_ops);
CREATE INDEX
Compare \dAf to \dAc. The latter shows what opclasses you can use for
each datatype, while the former shows what types can be used with an
index using the opfamily that the opclass belongs into.
As I understand it, the cross-type operators are "loose" in the opfamily
and they don't belong to any opclass. So what we could do is list the
opclasses within each opfamily, and then list all the loose operators.
Something like (fixed width font):
Operator family Operator class Operator
------------------------------------------------------------
integer_minmax_ops int4_minmax_ops =(integer,integer)
<(integer,integer)
>(integer,integer)
>=(integer,integer)
<=(integer,integer)
---------------------------------------
int2_minmax_ops =(smallint,smallint)
etc
----------------------------------------
... other opclasses ...
----------------------------------------
=(smallint,integer)
<(smallint,integer)
>(smallint,integer)
... rest of operators ...
-------------------------------------------------------------
--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-26 22:17 Tom Lane <tgl@sss.pgh.pa.us>
parent: Alvaro Herrera <alvherre@2ndquadrant.com>
1 sibling, 0 replies; 28+ messages in thread
From: Tom Lane @ 2020-08-26 22:17 UTC (permalink / raw)
To: Alvaro Herrera <alvherre@2ndquadrant.com>; +Cc: Michael Paquier <michael@paquier.xyz>; Bruce Momjian <bruce@momjian.us>; osdba <mailtch@163.com>; pgsql-docs; jkatz@postgresql.org
Alvaro Herrera <alvherre@2ndquadrant.com> writes:
> On 2020-Aug-26, Michael Paquier wrote:
>> I would imagine that rowsep=0 for a given <entry> can do that:
>> https://tdg.docbook.org/tdg/4.5/entry.html
>> However, it does not make a difference if I use the default style or
>> the website style. I may be missing something with the stylesheet
>> though?
> I have no idea there. Maybe Jon Katz (CCed) could help you to find an
> answer to that question.
Yeah, I can't make it work as documented either. Weird --- I wonder if
our stylesheets are messing that up? It *does* work in PDF output.
Speaking of PDF output, we have a fair amount of work to do to make these
tables render sanely in PDF. As the patch stands, it reintroduces a bunch
of "exceed the available area" complaints. Partly that is because, in the
interests of making the old contents fit, I'd given the operator column
less space than the others:
<colspec colname="col1" colwidth="2*"/>
<colspec colname="col2" colwidth="2*"/>
<colspec colname="col3" colwidth="1*"/>
which is backwards now, of course. Perhaps you could just drop the
<colspec>s again, or else twiddle their relative widths. Some other
recommendations I'd make are:
* Don't use the carpal-tunnel-inducing SQL standard datatype names,
but just "timestamp", "timestamptz", etc.
* Put a space after the comma in each operator description; this will
look better and it will cue FOP that that's a good place for a line
break.
* I'm inclined to think that spaces before the operators' left parens
would improve readabilty, too.
> As I understand it, the cross-type operators are "loose" in the opfamily
> and they don't belong to any opclass. So what we could do is list the
> opclasses within each opfamily, and then list all the loose operators.
> Something like (fixed width font):
>
> Operator family Operator class Operator
> ------------------------------------------------------------
> integer_minmax_ops int4_minmax_ops =(integer,integer)
> <(integer,integer)
> >(integer,integer)
> >=(integer,integer)
> <=(integer,integer)
Hm, do we care quite that much about explaining this difference?
But you're right that we hardly need the "data type" column
per se when the operator column is repeating the same info.
> Thanks for doing the legwork!
Indeed.
regards, tom lane
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-26 22:39 Bruce Momjian <bruce@momjian.us>
parent: Alvaro Herrera <alvherre@2ndquadrant.com>
1 sibling, 1 reply; 28+ messages in thread
From: Bruce Momjian @ 2020-08-26 22:39 UTC (permalink / raw)
To: Alvaro Herrera <alvherre@2ndquadrant.com>; +Cc: Michael Paquier <michael@paquier.xyz>; Tom Lane <tgl@sss.pgh.pa.us>; osdba <mailtch@163.com>; pgsql-docs; jkatz@postgresql.org
On Wed, Aug 26, 2020 at 05:58:01PM -0400, Alvaro Herrera wrote:
> Well, there is a small problem here ... which is that I misled you with
> \dAo ... because that one lists the operators for the opfamilies, not
> for the opclasses. And you can't use the opfamily name in CREATE INDEX:
>
> 55432 14devel 30811=# create index on t using brin (a integer_minmax_ops);
> ERROR: operator class "integer_minmax_ops" does not exist for access method "brin"
>
> You have to use the opclass name:
>
> 55432 14devel 30811=# create index on t using brin (a int4_minmax_ops);
> CREATE INDEX
>
> Compare \dAf to \dAc. The latter shows what opclasses you can use for
> each datatype, while the former shows what types can be used with an
> index using the opfamily that the opclass belongs into.
>
> As I understand it, the cross-type operators are "loose" in the opfamily
> and they don't belong to any opclass. So what we could do is list the
> opclasses within each opfamily, and then list all the loose operators.
> Something like (fixed width font):
Stupid question, but do we think the average Postgres user can
understand this issue. I am having trouble myself.
--
Bruce Momjian <bruce@momjian.us> https://momjian.us
EnterpriseDB https://enterprisedb.com
The usefulness of a cup is in its emptiness, Bruce Lee
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-26 22:58 Alvaro Herrera <alvherre@2ndquadrant.com>
parent: Bruce Momjian <bruce@momjian.us>
0 siblings, 1 reply; 28+ messages in thread
From: Alvaro Herrera @ 2020-08-26 22:58 UTC (permalink / raw)
To: Bruce Momjian <bruce@momjian.us>; +Cc: Michael Paquier <michael@paquier.xyz>; Tom Lane <tgl@sss.pgh.pa.us>; osdba <mailtch@163.com>; pgsql-docs; jkatz@postgresql.org
On 2020-Aug-26, Bruce Momjian wrote:
> On Wed, Aug 26, 2020 at 05:58:01PM -0400, Alvaro Herrera wrote:
> > Well, there is a small problem here ... which is that I misled you with
> > \dAo ... because that one lists the operators for the opfamilies, not
> > for the opclasses. And you can't use the opfamily name in CREATE INDEX:
> >
> > 55432 14devel 30811=# create index on t using brin (a integer_minmax_ops);
> > ERROR: operator class "integer_minmax_ops" does not exist for access method "brin"
> >
> > You have to use the opclass name:
> >
> > 55432 14devel 30811=# create index on t using brin (a int4_minmax_ops);
> > CREATE INDEX
> >
> > Compare \dAf to \dAc. The latter shows what opclasses you can use for
> > each datatype, while the former shows what types can be used with an
> > index using the opfamily that the opclass belongs into.
> >
> > As I understand it, the cross-type operators are "loose" in the opfamily
> > and they don't belong to any opclass. So what we could do is list the
> > opclasses within each opfamily, and then list all the loose operators.
> > Something like (fixed width font):
>
> Stupid question, but do we think the average Postgres user can
> understand this issue. I am having trouble myself.
The only reason I think it's worth pointing out, is that the opclass
name is something you can use in CREATE INDEX, while the opfamily name
cannot be used there. The original tables can be used for that purpose,
but the patched tables cannot.
--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-26 23:19 Tom Lane <tgl@sss.pgh.pa.us>
parent: Alvaro Herrera <alvherre@2ndquadrant.com>
0 siblings, 1 reply; 28+ messages in thread
From: Tom Lane @ 2020-08-26 23:19 UTC (permalink / raw)
To: Alvaro Herrera <alvherre@2ndquadrant.com>; +Cc: Bruce Momjian <bruce@momjian.us>; Michael Paquier <michael@paquier.xyz>; osdba <mailtch@163.com>; pgsql-docs; jkatz@postgresql.org
Alvaro Herrera <alvherre@2ndquadrant.com> writes:
> On 2020-Aug-26, Bruce Momjian wrote:
>> Stupid question, but do we think the average Postgres user can
>> understand this issue. I am having trouble myself.
> The only reason I think it's worth pointing out, is that the opclass
> name is something you can use in CREATE INDEX, while the opfamily name
> cannot be used there. The original tables can be used for that purpose,
> but the patched tables cannot.
With one eye on the PDF width issue, I propose that we not draw
the distinction, but just list all the relevant operators for each
opclass (its native ones, plus the applicable "loose" operators).
Then we only need two columns, opclass and operators.
regards, tom lane
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-27 06:33 Michael Paquier <michael@paquier.xyz>
parent: Tom Lane <tgl@sss.pgh.pa.us>
0 siblings, 1 reply; 28+ messages in thread
From: Michael Paquier @ 2020-08-27 06:33 UTC (permalink / raw)
To: Tom Lane <tgl@sss.pgh.pa.us>; +Cc: Alvaro Herrera <alvherre@2ndquadrant.com>; Bruce Momjian <bruce@momjian.us>; osdba <mailtch@163.com>; pgsql-docs; jkatz@postgresql.org
On Wed, Aug 26, 2020 at 07:19:09PM -0400, Tom Lane wrote:
> With one eye on the PDF width issue, I propose that we not draw
> the distinction, but just list all the relevant operators for each
> opclass (its native ones, plus the applicable "loose" operators).
> Then we only need two columns, opclass and operators.
Indeed, removing the types makes sense if we list them with the
operators. I have been looking at your suggestions, and adding a
space before the first parenthesis where the types are listed sounds
good to me, but I am not sure that it is a good idea to add spaces
between each type. Looking at the pdf produced, I think that we
should also drop entirely colspec for the BRIN table as it gets much
small in width once the data type column is removed. I also looked at
rowsep for the PDF, and I tend to prefer the version where we separate
each cell for the operator, as a matter of readability.
This leads me to the updated version attached. BRIN has 29 different
opclasses, visibly.
--
Michael
Attachments:
doc-builtin-ops-v2.patch (text/x-diff, 46.6K) download
diff --git a/doc/src/sgml/brin.sgml b/doc/src/sgml/brin.sgml
index b9d596e3c4..c3298ed92b 100644
--- a/doc/src/sgml/brin.sgml
+++ b/doc/src/sgml/brin.sgml
@@ -120,354 +120,293 @@ LOG: request for BRIN range summarization for index "brin_wi_idx" page 128 was
<table id="brin-builtin-opclasses-table">
<title>Built-in <acronym>BRIN</acronym> Operator Classes</title>
- <tgroup cols="3">
- <colspec colname="col1" colwidth="2*"/>
- <colspec colname="col2" colwidth="2*"/>
- <colspec colname="col3" colwidth="1*"/>
+ <tgroup cols="2">
<thead>
<row>
<entry>Name</entry>
- <entry>Indexed Data Type</entry>
<entry>Indexable Operators</entry>
</row>
</thead>
<tbody>
<row>
- <entry><literal>int8_minmax_ops</literal></entry>
- <entry><type>bigint</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="13"><literal>range_inclusion_ops</literal></entry>
+ <entry><literal>= (anyrange,anyrange)</literal></entry>
</row>
+ <row><entry><literal>< (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal><= (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>>= (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>> (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>&& (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>@> (anyrange,anyelement)</literal></entry></row>
+ <row><entry><literal>@> (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal><@ (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal><< (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>>> (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>&< (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>&> (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>-|- (anyrange,anyrange)</literal></entry></row>
+
<row>
- <entry><literal>bit_minmax_ops</literal></entry>
- <entry><type>bit</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>bit_minmax_ops</literal></entry>
+ <entry><literal>= (bit,bit)</literal></entry>
</row>
+ <row><entry><literal>< (bit,bit)</literal></entry></row>
+ <row><entry><literal>> (bit,bit)</literal></entry></row>
+ <row><entry><literal><= (bit,bit)</literal></entry></row>
+ <row><entry><literal>>= (bit,bit)</literal></entry></row>
+
<row>
- <entry><literal>varbit_minmax_ops</literal></entry>
- <entry><type>bit varying</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>varbit_minmax_ops</literal></entry>
+ <entry><literal>= (varbit,varbit)</literal></entry>
</row>
+ <row><entry><literal>< (varbit,varbit)</literal></entry></row>
+ <row><entry><literal>> (varbit,varbit)</literal></entry></row>
+ <row><entry><literal><= (varbit,varbit)</literal></entry></row>
+ <row><entry><literal>>= (varbit,varbit)</literal></entry></row>
+
<row>
- <entry><literal>box_inclusion_ops</literal></entry>
- <entry><type>box</type></entry>
- <entry>
- <literal><<</literal>
- <literal>&<</literal>
- <literal>&&</literal>
- <literal>&></literal>
- <literal>>></literal>
- <literal>~=</literal>
- <literal>@></literal>
- <literal><@</literal>
- <literal>&<|</literal>
- <literal><<|</literal>
- <literal>|>></literal>
- <literal>|&></literal>
- </entry>
+ <entry morerows="12"><literal>box_inclusion_ops</literal></entry>
+ <entry><literal>@> (box,point)</literal></entry>
</row>
+ <row><entry><literal><< (box,box)</literal></entry></row>
+ <row><entry><literal>&< (box,box)</literal></entry></row>
+ <row><entry><literal>&> (box,box)</literal></entry></row>
+ <row><entry><literal>>> (box,box)</literal></entry></row>
+ <row><entry><literal><@ (box,box)</literal></entry></row>
+ <row><entry><literal>@> (box,box)</literal></entry></row>
+ <row><entry><literal>~= (box,box)</literal></entry></row>
+ <row><entry><literal>&& (box,box)</literal></entry></row>
+ <row><entry><literal><<| (box,box)</literal></entry></row>
+ <row><entry><literal>&<| (box,box)</literal></entry></row>
+ <row><entry><literal>|&> (box,box)</literal></entry></row>
+ <row><entry><literal>|>> (box,box)</literal></entry></row>
+
<row>
- <entry><literal>bytea_minmax_ops</literal></entry>
- <entry><type>bytea</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>bpchar_minmax_ops</literal></entry>
+ <entry><literal>= (character,character)</literal></entry>
</row>
+ <row><entry><literal>< (character,character)</literal></entry></row>
+ <row><entry><literal><= (character,character)</literal></entry></row>
+ <row><entry><literal>> (character,character)</literal></entry></row>
+ <row><entry><literal>>= (character,character)</literal></entry></row>
+
<row>
- <entry><literal>bpchar_minmax_ops</literal></entry>
- <entry><type>character</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>bytea_minmax_ops</literal></entry>
+ <entry><literal>= (bytea,bytea)</literal></entry>
</row>
+ <row><entry><literal>< (bytea,bytea)</literal></entry></row>
+ <row><entry><literal><= (bytea,bytea)</literal></entry></row>
+ <row><entry><literal>> (bytea,bytea)</literal></entry></row>
+ <row><entry><literal>>= (bytea,bytea)</literal></entry></row>
+
<row>
- <entry><literal>char_minmax_ops</literal></entry>
- <entry><type>"char"</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>char_minmax_ops</literal></entry>
+ <entry><literal>= ("char","char")</literal></entry>
</row>
+ <row><entry><literal>< ("char","char")</literal></entry></row>
+ <row><entry><literal><= ("char","char")</literal></entry></row>
+ <row><entry><literal>> ("char","char")</literal></entry></row>
+ <row><entry><literal>>= ("char","char")</literal></entry></row>
+
<row>
- <entry><literal>date_minmax_ops</literal></entry>
- <entry><type>date</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>date_minmax_ops</literal></entry>
+ <entry><literal>= (date,date)</literal></entry>
</row>
+ <row><entry><literal>< (date,date)</literal></entry></row>
+ <row><entry><literal><= (date,date)</literal></entry></row>
+ <row><entry><literal>> (date,date)</literal></entry></row>
+ <row><entry><literal>>= (date,date)</literal></entry></row>
+
<row>
- <entry><literal>float8_minmax_ops</literal></entry>
- <entry><type>double precision</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>float4_minmax_ops</literal></entry>
+ <entry><literal>= (float4,float4)</literal></entry>
</row>
+ <row><entry><literal>< (float4,float4)</literal></entry></row>
+ <row><entry><literal>> (float4,float4)</literal></entry></row>
+ <row><entry><literal><= (float4,float4)</literal></entry></row>
+ <row><entry><literal>>= (float4,float4)</literal></entry></row>
+
<row>
- <entry><literal>inet_minmax_ops</literal></entry>
- <entry><type>inet</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>float8_minmax_ops</literal></entry>
+ <entry><literal>= (float8,float8)</literal></entry>
</row>
+ <row><entry><literal>< (float8,float8)</literal></entry></row>
+ <row><entry><literal><= (float8,float8)</literal></entry></row>
+ <row><entry><literal>> (float8,float8)</literal></entry></row>
+ <row><entry><literal>>= (float8,float8)</literal></entry></row>
+
<row>
- <entry><literal>network_inclusion_ops</literal></entry>
- <entry><type>inet</type></entry>
- <entry>
- <literal>&&</literal>
- <literal>>>=</literal>
- <literal><<=</literal>
- <literal>=</literal>
- <literal>>></literal>
- <literal><<</literal>
- </entry>
+ <entry morerows="5"><literal>inet_inclusion_ops</literal></entry>
+ <entry><literal><< (inet,inet)</literal></entry>
</row>
+ <row><entry><literal><<= (inet,inet)</literal></entry></row>
+ <row><entry><literal>>> (inet,inet)</literal></entry></row>
+ <row><entry><literal>>>= (inet,inet)</literal></entry></row>
+ <row><entry><literal>= (inet,inet)</literal></entry></row>
+ <row><entry><literal>&& (inet,inet)</literal></entry></row>
+
<row>
- <entry><literal>int4_minmax_ops</literal></entry>
- <entry><type>integer</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>inet_minmax_ops</literal></entry>
+ <entry><literal>= (inet,inet)</literal></entry>
</row>
+ <row><entry><literal>< (inet,inet)</literal></entry></row>
+ <row><entry><literal><= (inet,inet)</literal></entry></row>
+ <row><entry><literal>> (inet,inet)</literal></entry></row>
+ <row><entry><literal>>= (inet,inet)</literal></entry></row>
+
<row>
- <entry><literal>interval_minmax_ops</literal></entry>
- <entry><type>interval</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>int2_minmax_ops</literal></entry>
+ <entry><literal>= (int2,int2)</literal></entry>
</row>
+ <row><entry><literal>< (int2,int2)</literal></entry></row>
+ <row><entry><literal>> (int2,int2)</literal></entry></row>
+ <row><entry><literal><= (int2,int2)</literal></entry></row>
+ <row><entry><literal>>= (int2,int2)</literal></entry></row>
+
<row>
- <entry><literal>macaddr_minmax_ops</literal></entry>
- <entry><type>macaddr</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>int4_minmax_ops</literal></entry>
+ <entry><literal>= (int4,int4)</literal></entry>
</row>
+ <row><entry><literal>< (int4,int4)</literal></entry></row>
+ <row><entry><literal>> (int4,int4)</literal></entry></row>
+ <row><entry><literal><= (int4,int4)</literal></entry></row>
+ <row><entry><literal>>= (int4,int4)</literal></entry></row>
+
<row>
- <entry><literal>macaddr8_minmax_ops</literal></entry>
- <entry><type>macaddr8</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>int8_minmax_ops</literal></entry>
+ <entry><literal>= (bigint,bigint)</literal></entry>
</row>
+ <row><entry><literal>< (bigint,bigint)</literal></entry></row>
+ <row><entry><literal>> (bigint,bigint)</literal></entry></row>
+ <row><entry><literal><= (bigint,bigint)</literal></entry></row>
+ <row><entry><literal>>= (bigint,bigint)</literal></entry></row>
+
<row>
- <entry><literal>name_minmax_ops</literal></entry>
- <entry><type>name</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>interval_minmax_ops</literal></entry>
+ <entry><literal>= (interval,interval)</literal></entry>
</row>
+ <row><entry><literal>< (interval,interval)</literal></entry></row>
+ <row><entry><literal><= (interval,interval)</literal></entry></row>
+ <row><entry><literal>> (interval,interval)</literal></entry></row>
+ <row><entry><literal>>= (interval,interval)</literal></entry></row>
+
<row>
- <entry><literal>numeric_minmax_ops</literal></entry>
- <entry><type>numeric</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>macaddr_minmax_ops</literal></entry>
+ <entry><literal>= (macaddr,macaddr)</literal></entry>
</row>
+ <row><entry><literal>< (macaddr,macaddr)</literal></entry></row>
+ <row><entry><literal><= (macaddr,macaddr)</literal></entry></row>
+ <row><entry><literal>> (macaddr,macaddr)</literal></entry></row>
+ <row><entry><literal>>= (macaddr,macaddr)</literal></entry></row>
+
<row>
- <entry><literal>pg_lsn_minmax_ops</literal></entry>
- <entry><type>pg_lsn</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>macaddr8_minmax_ops</literal></entry>
+ <entry><literal>= (macaddr8,macaddr8)</literal></entry>
</row>
+ <row><entry><literal>< (macaddr8,macaddr8)</literal></entry></row>
+ <row><entry><literal><= (macaddr8,macaddr8)</literal></entry></row>
+ <row><entry><literal>> (macaddr8,macaddr8)</literal></entry></row>
+ <row><entry><literal>>= (macaddr8,macaddr8)</literal></entry></row>
+
<row>
- <entry><literal>oid_minmax_ops</literal></entry>
- <entry><type>oid</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>name_minmax_ops</literal></entry>
+ <entry><literal>= (name,name)</literal></entry>
</row>
+ <row><entry><literal>< (name,name)</literal></entry></row>
+ <row><entry><literal><= (name,name)</literal></entry></row>
+ <row><entry><literal>> (name,name)</literal></entry></row>
+ <row><entry><literal>>= (name,name)</literal></entry></row>
+
<row>
- <entry><literal>range_inclusion_ops</literal></entry>
- <entry><type>any range type</type></entry>
- <entry>
- <literal><<</literal>
- <literal>&<</literal>
- <literal>&&</literal>
- <literal>&></literal>
- <literal>>></literal>
- <literal>@></literal>
- <literal><@</literal>
- <literal>-|-</literal>
- <literal>=</literal>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>></literal>
- <literal>>=</literal>
- </entry>
+ <entry morerows="4"><literal>numeric_minmax_ops</literal></entry>
+ <entry><literal>= (numeric,numeric)</literal></entry>
</row>
+ <row><entry><literal>< (numeric,numeric)</literal></entry></row>
+ <row><entry><literal><= (numeric,numeric)</literal></entry></row>
+ <row><entry><literal>> (numeric,numeric)</literal></entry></row>
+ <row><entry><literal>>= (numeric,numeric)</literal></entry></row>
+
<row>
- <entry><literal>float4_minmax_ops</literal></entry>
- <entry><type>real</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>oid_minmax_ops</literal></entry>
+ <entry><literal>= (oid,oid)</literal></entry>
</row>
+ <row><entry><literal>< (oid,oid)</literal></entry></row>
+ <row><entry><literal>> (oid,oid)</literal></entry></row>
+ <row><entry><literal><= (oid,oid)</literal></entry></row>
+ <row><entry><literal>>= (oid,oid)</literal></entry></row>
+
<row>
- <entry><literal>int2_minmax_ops</literal></entry>
- <entry><type>smallint</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>pg_lsn_minmax_ops</literal></entry>
+ <entry><literal>= (pg_lsn,pg_lsn)</literal></entry>
</row>
+ <row><entry><literal>< (pg_lsn,pg_lsn)</literal></entry></row>
+ <row><entry><literal>> (pg_lsn,pg_lsn)</literal></entry></row>
+ <row><entry><literal><= (pg_lsn,pg_lsn)</literal></entry></row>
+ <row><entry><literal>>= (pg_lsn,pg_lsn)</literal></entry></row>
+
<row>
- <entry><literal>text_minmax_ops</literal></entry>
- <entry><type>text</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>text_minmax_ops</literal></entry>
+ <entry><literal>= (text,text)</literal></entry>
</row>
+ <row><entry><literal>< (text,text)</literal></entry></row>
+ <row><entry><literal><= (text,text)</literal></entry></row>
+ <row><entry><literal>> (text,text)</literal></entry></row>
+ <row><entry><literal>>= (text,text)</literal></entry></row>
+
<row>
- <entry><literal>tid_minmax_ops</literal></entry>
- <entry><type>tid</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>tid_minmax_ops</literal></entry>
+ <entry><literal>= (tid,tid)</literal></entry>
</row>
+ <row><entry><literal>< (tid,tid)</literal></entry></row>
+ <row><entry><literal>> (tid,tid)</literal></entry></row>
+ <row><entry><literal><= (tid,tid)</literal></entry></row>
+ <row><entry><literal>>= (tid,tid)</literal></entry></row>
+
<row>
- <entry><literal>timestamp_minmax_ops</literal></entry>
- <entry><type>timestamp without time zone</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>timestamp_minmax_ops</literal></entry>
+ <entry><literal>= (timestamp,timestamp)</literal></entry>
</row>
+ <row><entry><literal>< (timestamp,timestamp)</literal></entry></row>
+ <row><entry><literal><= (timestamp,timestamp)</literal></entry></row>
+ <row><entry><literal>> (timestamp,timestamp)</literal></entry></row>
+ <row><entry><literal>>= (timestamp,timestamp)</literal></entry></row>
+
<row>
- <entry><literal>timestamptz_minmax_ops</literal></entry>
- <entry><type>timestamp with time zone</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>timestamptz_minmax_ops</literal></entry>
+ <entry><literal>= (timestamptz,timestamptz)</literal></entry>
</row>
+ <row><entry><literal>< (timestamptz,timestamptz)</literal></entry></row>
+ <row><entry><literal><= (timestamptz,timestamptz)</literal></entry></row>
+ <row><entry><literal>> (timestamptz,timestamptz)</literal></entry></row>
+ <row><entry><literal>>= (timestamptz,timestamptz)</literal></entry></row>
+
<row>
- <entry><literal>time_minmax_ops</literal></entry>
- <entry><type>time without time zone</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>time_minmax_ops</literal></entry>
+ <entry><literal>= (time,time)</literal></entry>
</row>
+ <row><entry><literal>< (time,time)</literal></entry></row>
+ <row><entry><literal><= (time,time)</literal></entry></row>
+ <row><entry><literal>> (time,time)</literal></entry></row>
+ <row><entry><literal>>= (time,time)</literal></entry></row>
+
<row>
- <entry><literal>timetz_minmax_ops</literal></entry>
- <entry><type>time with time zone</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>timetz_minmax_ops</literal></entry>
+ <entry><literal>= (timetz,timetz)</literal></entry>
</row>
+ <row><entry><literal>< (timetz,timetz)</literal></entry></row>
+ <row><entry><literal><= (timetz,timetz)</literal></entry></row>
+ <row><entry><literal>> (timetz,timetz)</literal></entry></row>
+ <row><entry><literal>>= (timetz,timetz)</literal></entry></row>
+
<row>
- <entry><literal>uuid_minmax_ops</literal></entry>
- <entry><type>uuid</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>>=</literal>
- <literal>></literal>
- </entry>
+ <entry morerows="4"><literal>uuid_minmax_ops</literal></entry>
+ <entry><literal>= (uuid,uuid)</literal></entry>
</row>
+ <row><entry><literal>< (uuid,uuid)</literal></entry></row>
+ <row><entry><literal>> (uuid,uuid)</literal></entry></row>
+ <row><entry><literal><= (uuid,uuid)</literal></entry></row>
+ <row><entry><literal>>= (uuid,uuid)</literal></entry></row>
+
</tbody>
</tgroup>
</table>
diff --git a/doc/src/sgml/gin.sgml b/doc/src/sgml/gin.sgml
index 2d862669c3..4107a86cb0 100644
--- a/doc/src/sgml/gin.sgml
+++ b/doc/src/sgml/gin.sgml
@@ -75,53 +75,62 @@
<table id="gin-builtin-opclasses-table">
<title>Built-in <acronym>GIN</acronym> Operator Classes</title>
- <tgroup cols="3">
+ <tgroup cols="2">
<thead>
<row>
<entry>Name</entry>
- <entry>Indexed Data Type</entry>
<entry>Indexable Operators</entry>
</row>
</thead>
<tbody>
<row>
- <entry><literal>array_ops</literal></entry>
- <entry><type>anyarray</type></entry>
- <entry>
- <literal>&&</literal>
- <literal><@</literal>
- <literal>=</literal>
- <literal>@></literal>
- </entry>
+ <entry morerows="3"><literal>array_ops</literal></entry>
+ <entry><literal>&& (anyarray,anyarray)</literal></entry>
</row>
<row>
- <entry><literal>jsonb_ops</literal></entry>
- <entry><type>jsonb</type></entry>
- <entry>
- <literal>?</literal>
- <literal>?&</literal>
- <literal>?|</literal>
- <literal>@></literal>
- <literal>@?</literal>
- <literal>@@</literal>
- </entry>
+ <entry><literal>@> (anyarray,anyarray)</literal></entry>
</row>
<row>
- <entry><literal>jsonb_path_ops</literal></entry>
- <entry><type>jsonb</type></entry>
- <entry>
- <literal>@></literal>
- <literal>@?</literal>
- <literal>@@</literal>
- </entry>
+ <entry><literal><@ (anyarray,anyarray)</literal></entry>
</row>
<row>
- <entry><literal>tsvector_ops</literal></entry>
- <entry><type>tsvector</type></entry>
- <entry>
- <literal>@@</literal>
- <literal>@@@</literal>
- </entry>
+ <entry><literal>= (anyarray,anyarray)</literal></entry>
+ </row>
+ <row>
+ <entry morerows="5"><literal>jsonb_ops</literal></entry>
+ <entry><literal>@> (jsonb,jsonb)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>@? (jsonb,jsonpath)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>@@ (jsonb,jsonpath)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>? (jsonb,text)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>?| (jsonb,text[])</literal></entry>
+ </row>
+ <row>
+ <entry><literal>?& (jsonb,text[])</literal></entry>
+ </row>
+ <row>
+ <entry morerows="2"><literal>jsonb_path_ops</literal></entry>
+ <entry><literal>@> (jsonb,jsonb)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>@? (jsonb,jsonpath)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>@@ (jsonb,jsonpath)</literal></entry>
+ </row>
+ <row>
+ <entry morerows="1"><literal>tsvector_ops</literal></entry>
+ <entry><literal>@@ (tsvector,tsquery)</literal></entry>
+ </row>
+ <row>
+ <entry><literal>@@@ (tsvector,tsquery)</literal></entry>
</row>
</tbody>
</tgroup>
diff --git a/doc/src/sgml/gist.sgml b/doc/src/sgml/gist.sgml
index a505815f4e..2ee06585d1 100644
--- a/doc/src/sgml/gist.sgml
+++ b/doc/src/sgml/gist.sgml
@@ -53,157 +53,126 @@
<table id="gist-builtin-opclasses-table">
<title>Built-in <acronym>GiST</acronym> Operator Classes</title>
- <tgroup cols="4">
+ <tgroup cols="3">
<thead>
<row>
<entry>Name</entry>
- <entry>Indexed Data Type</entry>
<entry>Indexable Operators</entry>
<entry>Ordering Operators</entry>
</row>
</thead>
<tbody>
<row>
- <entry><literal>box_ops</literal></entry>
- <entry><type>box</type></entry>
- <entry>
- <literal>&&</literal>
- <literal>&></literal>
- <literal>&<</literal>
- <literal>&<|</literal>
- <literal>>></literal>
- <literal><<</literal>
- <literal><<|</literal>
- <literal><@</literal>
- <literal>@></literal>
- <literal>@</literal>
- <literal>|&></literal>
- <literal>|>></literal>
- <literal>~</literal>
- <literal>~=</literal>
- </entry>
- <entry>
- <literal><-></literal>
- </entry>
+ <entry morerows="13"><literal>box_ops</literal></entry>
+ <entry><literal><< (box,box)</literal></entry>
+ <entry morerows="13"><literal><-> (box,point)</literal></entry>
</row>
+ <row><entry><literal>&< (box,box)</literal></entry></row>
+ <row><entry><literal>&& (box,box)</literal></entry></row>
+ <row><entry><literal>&> (box,box)</literal></entry></row>
+ <row><entry><literal>>> (box,box)</literal></entry></row>
+ <row><entry><literal>~= (box,box)</literal></entry></row>
+ <row><entry><literal>@> (box,box)</literal></entry></row>
+ <row><entry><literal><@ (box,box)</literal></entry></row>
+ <row><entry><literal>&<| (box,box)</literal></entry></row>
+ <row><entry><literal><<| (box,box)</literal></entry></row>
+ <row><entry><literal>|>> (box,box)</literal></entry></row>
+ <row><entry><literal>|&> (box,box)</literal></entry></row>
+ <row><entry><literal>~ (box,box)</literal></entry></row>
+ <row><entry><literal>@ (box,box)</literal></entry></row>
+
<row>
- <entry><literal>circle_ops</literal></entry>
- <entry><type>circle</type></entry>
- <entry>
- <literal>&&</literal>
- <literal>&></literal>
- <literal>&<</literal>
- <literal>&<|</literal>
- <literal>>></literal>
- <literal><<</literal>
- <literal><<|</literal>
- <literal><@</literal>
- <literal>@></literal>
- <literal>@</literal>
- <literal>|&></literal>
- <literal>|>></literal>
- <literal>~</literal>
- <literal>~=</literal>
- </entry>
- <entry>
- <literal><-></literal>
- </entry>
+ <entry morerows="13"><literal>circle_ops</literal></entry>
+ <entry><literal><< (circle,circle)</literal></entry>
+ <entry morerows="13"><literal><-> (circle,point)</literal></entry>
</row>
+ <row><entry><literal>&< (circle,circle)</literal></entry></row>
+ <row><entry><literal>&> (circle,circle)</literal></entry></row>
+ <row><entry><literal>>> (circle,circle)</literal></entry></row>
+ <row><entry><literal><@ (circle,circle)</literal></entry></row>
+ <row><entry><literal>@> (circle,circle)</literal></entry></row>
+ <row><entry><literal>~= (circle,circle)</literal></entry></row>
+ <row><entry><literal>&& (circle,circle)</literal></entry></row>
+ <row><entry><literal>|>> (circle,circle)</literal></entry></row>
+ <row><entry><literal><<| (circle,circle)</literal></entry></row>
+ <row><entry><literal>&<| (circle,circle)</literal></entry></row>
+ <row><entry><literal>|&> (circle,circle)</literal></entry></row>
+ <row><entry><literal>@ (circle,circle)</literal></entry></row>
+ <row><entry><literal>~ (circle,circle)</literal></entry></row>
+
<row>
- <entry><literal>inet_ops</literal></entry>
- <entry><type>inet</type>, <type>cidr</type></entry>
- <entry>
- <literal>&&</literal>
- <literal>>></literal>
- <literal>>>=</literal>
- <literal>></literal>
- <literal>>=</literal>
- <literal><></literal>
- <literal><<</literal>
- <literal><<=</literal>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- </entry>
- <entry>
- </entry>
+ <entry morerows="10"><literal>inet_ops</literal></entry>
+ <entry><literal><< (inet,inet)</literal></entry>
+ <entry morerows="10"></entry>
</row>
+ <row><entry><literal><<= (inet,inet)</literal></entry></row>
+ <row><entry><literal>>> (inet,inet)</literal></entry></row>
+ <row><entry><literal>>>= (inet,inet)</literal></entry></row>
+ <row><entry><literal>= (inet,inet)</literal></entry></row>
+ <row><entry><literal><> (inet,inet)</literal></entry></row>
+ <row><entry><literal>< (inet,inet)</literal></entry></row>
+ <row><entry><literal><= (inet,inet)</literal></entry></row>
+ <row><entry><literal>> (inet,inet)</literal></entry></row>
+ <row><entry><literal>>= (inet,inet)</literal></entry></row>
+ <row><entry><literal>&& (inet,inet)</literal></entry></row>
+
<row>
- <entry><literal>point_ops</literal></entry>
- <entry><type>point</type></entry>
- <entry>
- <literal>>></literal>
- <literal>>^</literal>
- <literal><<</literal>
- <literal><@</literal>
- <literal><@</literal>
- <literal><@</literal>
- <literal><^</literal>
- <literal>~=</literal>
- </entry>
- <entry>
- <literal><-></literal>
- </entry>
+ <entry morerows="7"><literal>point_ops</literal></entry>
+ <entry><literal>>^ (point,point)</literal></entry>
+ <entry morerows="7"><literal><-> (point,point)</literal></entry>
</row>
+ <row><entry><literal><< (point,point)</literal></entry></row>
+ <row><entry><literal>>> (point,point)</literal></entry></row>
+ <row><entry><literal><^ (point,point)</literal></entry></row>
+ <row><entry><literal>~= (point,point)</literal></entry></row>
+ <row><entry><literal><@ (point,box)</literal></entry></row>
+ <row><entry><literal><@ (point,polygon)</literal></entry></row>
+ <row><entry><literal><@ (point,circle)</literal></entry></row>
+
<row>
- <entry><literal>poly_ops</literal></entry>
- <entry><type>polygon</type></entry>
- <entry>
- <literal>&&</literal>
- <literal>&></literal>
- <literal>&<</literal>
- <literal>&<|</literal>
- <literal>>></literal>
- <literal><<</literal>
- <literal><<|</literal>
- <literal><@</literal>
- <literal>@></literal>
- <literal>@</literal>
- <literal>|&></literal>
- <literal>|>></literal>
- <literal>~</literal>
- <literal>~=</literal>
- </entry>
- <entry>
- <literal><-></literal>
- </entry>
+ <entry morerows="13"><literal>poly_ops</literal></entry>
+ <entry><literal><< (polygon,polygon)</literal></entry>
+ <entry morerows="13"><literal><-> (polygon,point)</literal></entry>
</row>
+ <row><entry><literal>&< (polygon,polygon)</literal></entry></row>
+ <row><entry><literal>&> (polygon,polygon)</literal></entry></row>
+ <row><entry><literal>>> (polygon,polygon)</literal></entry></row>
+ <row><entry><literal><@ (polygon,polygon)</literal></entry></row>
+ <row><entry><literal>@> (polygon,polygon)</literal></entry></row>
+ <row><entry><literal>~= (polygon,polygon)</literal></entry></row>
+ <row><entry><literal>&& (polygon,polygon)</literal></entry></row>
+ <row><entry><literal><<| (polygon,polygon)</literal></entry></row>
+ <row><entry><literal>&<| (polygon,polygon)</literal></entry></row>
+ <row><entry><literal>|&> (polygon,polygon)</literal></entry></row>
+ <row><entry><literal>|>> (polygon,polygon)</literal></entry></row>
+ <row><entry><literal>@ (polygon,polygon)</literal></entry></row>
+ <row><entry><literal>~ (polygon,polygon)</literal></entry></row>
+
<row>
- <entry><literal>range_ops</literal></entry>
- <entry>any range type</entry>
- <entry>
- <literal>&&</literal>
- <literal>&></literal>
- <literal>&<</literal>
- <literal>>></literal>
- <literal><<</literal>
- <literal><@</literal>
- <literal>-|-</literal>
- <literal>=</literal>
- <literal>@></literal>
- <literal>@></literal>
- </entry>
- <entry>
- </entry>
+ <entry morerows="9"><literal>range_ops</literal></entry>
+ <entry><literal>= (anyrange,anyrange)</literal></entry>
+ <entry morerows="9"></entry>
</row>
+ <row><entry><literal>&& (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>@> (anyrange,anyelement)</literal></entry></row>
+ <row><entry><literal>@> (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal><@ (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal><< (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>>> (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>&< (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>&> (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>-|- (anyrange,anyrange)</literal></entry></row>
+
<row>
- <entry><literal>tsquery_ops</literal></entry>
- <entry><type>tsquery</type></entry>
- <entry>
- <literal><@</literal>
- <literal>@></literal>
- </entry>
- <entry>
- </entry>
+ <entry morerows="1"><literal>tsquery_ops</literal></entry>
+ <entry><literal><@ (tsquery,tsquery)</literal></entry>
+ <entry morerows="1"></entry>
</row>
+ <row><entry><literal>@> (tsquery,tsquery)</literal></entry></row>
<row>
<entry><literal>tsvector_ops</literal></entry>
- <entry><type>tsvector</type></entry>
- <entry>
- <literal>@@</literal>
- </entry>
- <entry>
- </entry>
+ <entry><literal>@@ (tsvector,tsquery)</literal></entry>
+ <entry></entry>
</row>
</tbody>
</tgroup>
diff --git a/doc/src/sgml/spgist.sgml b/doc/src/sgml/spgist.sgml
index b86302e4ef..915aeef1a2 100644
--- a/doc/src/sgml/spgist.sgml
+++ b/doc/src/sgml/spgist.sgml
@@ -64,142 +64,116 @@
<table id="spgist-builtin-opclasses-table">
<title>Built-in <acronym>SP-GiST</acronym> Operator Classes</title>
- <tgroup cols="4">
+ <tgroup cols="3">
<thead>
<row>
<entry>Name</entry>
- <entry>Indexed Data Type</entry>
<entry>Indexable Operators</entry>
<entry>Ordering Operators</entry>
</row>
</thead>
<tbody>
<row>
- <entry><literal>kd_point_ops</literal></entry>
- <entry><type>point</type></entry>
- <entry>
- <literal><<</literal>
- <literal><@</literal>
- <literal><^</literal>
- <literal>>></literal>
- <literal>>^</literal>
- <literal>~=</literal>
- </entry>
- <entry>
- <literal><-></literal>
- </entry>
+ <entry morerows="11"><literal>box_ops</literal></entry>
+ <entry><literal><< (box,box)</literal></entry>
+ <entry morerows="11"><literal><-> (box,point)</literal></entry>
</row>
+ <row><entry><literal>&< (box,box)</literal></entry></row>
+ <row><entry><literal>&> (box,box)</literal></entry></row>
+ <row><entry><literal>>> (box,box)</literal></entry></row>
+ <row><entry><literal><@ (box,box)</literal></entry></row>
+ <row><entry><literal>@> (box,box)</literal></entry></row>
+ <row><entry><literal>~= (box,box)</literal></entry></row>
+ <row><entry><literal>&& (box,box)</literal></entry></row>
+ <row><entry><literal><<| (box,box)</literal></entry></row>
+ <row><entry><literal>&<| (box,box)</literal></entry></row>
+ <row><entry><literal>|&> (box,box)</literal></entry></row>
+ <row><entry><literal>|>> (box,box)</literal></entry></row>
+
<row>
- <entry><literal>quad_point_ops</literal></entry>
- <entry><type>point</type></entry>
- <entry>
- <literal><<</literal>
- <literal><@</literal>
- <literal><^</literal>
- <literal>>></literal>
- <literal>>^</literal>
- <literal>~=</literal>
- </entry>
- <entry>
- <literal><-></literal>
- </entry>
+ <entry morerows="5"><literal>kd_point_ops</literal></entry>
+ <entry><literal>>^ (point,point)</literal></entry>
+ <entry morerows="5"><literal><-> (point,point)</literal></entry>
</row>
+ <row><entry><literal><< (point,point)</literal></entry></row>
+ <row><entry><literal>>> (point,point)</literal></entry></row>
+ <row><entry><literal><^ (point,point)</literal></entry></row>
+ <row><entry><literal>~= (point,point)</literal></entry></row>
+ <row><entry><literal><@ (point,box)</literal></entry></row>
+
<row>
- <entry><literal>range_ops</literal></entry>
- <entry>any range type</entry>
- <entry>
- <literal>&&</literal>
- <literal>&<</literal>
- <literal>&></literal>
- <literal>-|-</literal>
- <literal><<</literal>
- <literal><@</literal>
- <literal>=</literal>
- <literal>>></literal>
- <literal>@></literal>
- </entry>
- <entry>
- </entry>
+ <entry morerows="10"><literal>network_ops</literal></entry>
+ <entry><literal><< (inet,inet)</literal></entry>
+ <entry morerows="10"></entry>
</row>
+ <row><entry><literal><<= (inet,inet)</literal></entry></row>
+ <row><entry><literal>>> (inet,inet)</literal></entry></row>
+ <row><entry><literal>>>= (inet,inet)</literal></entry></row>
+ <row><entry><literal>= (inet,inet)</literal></entry></row>
+ <row><entry><literal><> (inet,inet)</literal></entry></row>
+ <row><entry><literal>< (inet,inet)</literal></entry></row>
+ <row><entry><literal><= (inet,inet)</literal></entry></row>
+ <row><entry><literal>> (inet,inet)</literal></entry></row>
+ <row><entry><literal>>= (inet,inet)</literal></entry></row>
+ <row><entry><literal>&& (inet,inet)</literal></entry></row>
+
<row>
- <entry><literal>box_ops</literal></entry>
- <entry><type>box</type></entry>
- <entry>
- <literal><<</literal>
- <literal>&<</literal>
- <literal>&&</literal>
- <literal>&></literal>
- <literal>>></literal>
- <literal>~=</literal>
- <literal>@></literal>
- <literal><@</literal>
- <literal>&<|</literal>
- <literal><<|</literal>
- <literal>|>></literal>
- <literal>|&></literal>
- </entry>
- <entry>
- <literal><-></literal>
- </entry>
+ <entry morerows="11"><literal>poly_ops</literal></entry>
+ <entry><literal><< (polygon,polygon)</literal></entry>
+ <entry morerows="11"><literal><-> (polygon,point)</literal></entry>
</row>
+ <row><entry><literal>&< (polygon,polygon)</literal></entry></row>
+ <row><entry><literal>&> (polygon,polygon)</literal></entry></row>
+ <row><entry><literal>>> (polygon,polygon)</literal></entry></row>
+ <row><entry><literal><@ (polygon,polygon)</literal></entry></row>
+ <row><entry><literal>@> (polygon,polygon)</literal></entry></row>
+ <row><entry><literal>~= (polygon,polygon)</literal></entry></row>
+ <row><entry><literal>&& (polygon,polygon)</literal></entry></row>
+ <row><entry><literal><<| (polygon,polygon)</literal></entry></row>
+ <row><entry><literal>&<| (polygon,polygon)</literal></entry></row>
+ <row><entry><literal>|>> (polygon,polygon)</literal></entry></row>
+ <row><entry><literal>|&> (polygon,polygon)</literal></entry></row>
+
<row>
- <entry><literal>poly_ops</literal></entry>
- <entry><type>polygon</type></entry>
- <entry>
- <literal><<</literal>
- <literal>&<</literal>
- <literal>&&</literal>
- <literal>&></literal>
- <literal>>></literal>
- <literal>~=</literal>
- <literal>@></literal>
- <literal><@</literal>
- <literal>&<|</literal>
- <literal><<|</literal>
- <literal>|>></literal>
- <literal>|&></literal>
- </entry>
- <entry>
- <literal><-></literal>
- </entry>
+ <entry morerows="5"><literal>quad_point_ops</literal></entry>
+ <entry><literal>>^ (point,point)</literal></entry>
+ <entry morerows="5"><literal><-> (point,point)</literal></entry>
</row>
+ <row><entry><literal><< (point,point)</literal></entry></row>
+ <row><entry><literal>>> (point,point)</literal></entry></row>
+ <row><entry><literal><^ (point,point)</literal></entry></row>
+ <row><entry><literal>~= (point,point)</literal></entry></row>
+ <row><entry><literal><@ (point,box)</literal></entry></row>
+
<row>
- <entry><literal>text_ops</literal></entry>
- <entry><type>text</type></entry>
- <entry>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- <literal>></literal>
- <literal>>=</literal>
- <literal>~<=~</literal>
- <literal>~<~</literal>
- <literal>~>=~</literal>
- <literal>~>~</literal>
- <literal>^@</literal>
- </entry>
- <entry>
- </entry>
+ <entry morerows="9"><literal>range_ops</literal></entry>
+ <entry><literal>= (anyrange,anyrange)</literal></entry>
+ <entry morerows="9"></entry>
</row>
+ <row><entry><literal>&& (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>@> (anyrange,anyelement)</literal></entry></row>
+ <row><entry><literal>@> (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal><@ (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal><< (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>>> (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>&< (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>&> (anyrange,anyrange)</literal></entry></row>
+ <row><entry><literal>-|- (anyrange,anyrange)</literal></entry></row>
+
<row>
- <entry><literal>inet_ops</literal></entry>
- <entry><type>inet</type>, <type>cidr</type></entry>
- <entry>
- <literal>&&</literal>
- <literal>>></literal>
- <literal>>>=</literal>
- <literal>></literal>
- <literal>>=</literal>
- <literal><></literal>
- <literal><<</literal>
- <literal><<=</literal>
- <literal><</literal>
- <literal><=</literal>
- <literal>=</literal>
- </entry>
- <entry>
- </entry>
+ <entry morerows="9"><literal>text_ops</literal></entry>
+ <entry><literal>= (text,text)</literal></entry>
+ <entry morerows="9"></entry>
</row>
+ <row><entry><literal>< (text,text)</literal></entry></row>
+ <row><entry><literal><= (text,text)</literal></entry></row>
+ <row><entry><literal>> (text,text)</literal></entry></row>
+ <row><entry><literal>>= (text,text)</literal></entry></row>
+ <row><entry><literal>~<~ (text,text)</literal></entry></row>
+ <row><entry><literal>~<=~ (text,text)</literal></entry></row>
+ <row><entry><literal>~>=~ (text,text)</literal></entry></row>
+ <row><entry><literal>~>~ (text,text)</literal></entry></row>
+ <row><entry><literal>^@ (text,text)</literal></entry></row>
</tbody>
</tgroup>
</table>
signature.asc (application/pgp-signature, 832B) download
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-27 16:07 Alvaro Herrera <alvherre@2ndquadrant.com>
parent: Michael Paquier <michael@paquier.xyz>
0 siblings, 1 reply; 28+ messages in thread
From: Alvaro Herrera @ 2020-08-27 16:07 UTC (permalink / raw)
To: Michael Paquier <michael@paquier.xyz>; +Cc: Tom Lane <tgl@sss.pgh.pa.us>; Bruce Momjian <bruce@momjian.us>; osdba <mailtch@163.com>; pgsql-docs; jkatz@postgresql.org
On 2020-Aug-27, Michael Paquier wrote:
> This leads me to the updated version attached. BRIN has 29 different
> opclasses, visibly.
I checked both HTML and PDF and it looks good to me to commit.
As a subsequent improvement we could discuss tweak the stylesheets to
change the column widths in PDF, but I don't think we need to stall this
patch for that, since it's a much smaller issue IMV.
--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
^ permalink raw reply [nested|flat] 28+ messages in thread
* Re: Document "59.2. Built-in Operator Classes" have a clerical error?
@ 2020-08-28 08:02 Michael Paquier <michael@paquier.xyz>
parent: Alvaro Herrera <alvherre@2ndquadrant.com>
0 siblings, 0 replies; 28+ messages in thread
From: Michael Paquier @ 2020-08-28 08:02 UTC (permalink / raw)
To: Tom Lane <tgl@sss.pgh.pa.us>; +Cc: Alvaro Herrera <alvherre@2ndquadrant.com>; Bruce Momjian <bruce@momjian.us>; osdba <mailtch@163.com>; pgsql-docs; jkatz@postgresql.org
On Thu, Aug 27, 2020 at 09:12:39PM -0400, Tom Lane wrote:
> I did not verify that the correct operators are listed, but visually
> it looks OK.
>
> One thing I've noted in working with this stuff is that (at least for me)
> HTML seems to default to valign=center while PDF defaults to valign=top.
> You can see that in these tables in the positioning of the opclass names.
> For myself, valign=center looks better in these cases so I'd suggest
> adding <colspec>s to force it that way. Or, if you like valign=top,
> we should do that --- but it ought to be consistent across output formats.
Yes. valign="center" does not exist, but I like your idea to use
"middle" here and make things consistent between the PDF and HTML
outputs. So I have used this option for the cells where this applies,
and committed the patch. Thanks all for the discussion and the
successive reviews.
--
Michael
Attachments:
signature.asc (application/pgp-signature, 832B) download
^ permalink raw reply [nested|flat] 28+ messages in thread
end of thread, other threads:[~2020-08-28 08:02 UTC | newest]
Thread overview: 28+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2020-08-03 07:49 Re: Document "59.2. Built-in Operator Classes" have a clerical error? Michael Paquier <michael@paquier.xyz>
2020-08-03 11:23 ` Re: Document "59.2. Built-in Operator Classes" have a clerical error? Tom Lane <tgl@sss.pgh.pa.us>
2020-08-04 05:56 ` Re: Document "59.2. Built-in Operator Classes" have a clerical error? Michael Paquier <michael@paquier.xyz>
2020-08-21 23:16 ` Bruce Momjian <bruce@momjian.us>
2020-08-22 03:19 ` Alvaro Herrera <alvherre@2ndquadrant.com>
2020-08-22 12:23 ` Michael Paquier <michael@paquier.xyz>
2020-08-22 16:55 ` Bruce Momjian <bruce@momjian.us>
2020-08-22 17:27 ` Re: Document "59.2. Built-in Operator Classes" have a clerical error? Tom Lane <tgl@sss.pgh.pa.us>
2020-08-22 18:59 ` Re: Document "59.2. Built-in Operator Classes" have a clerical error? Alvaro Herrera <alvherre@2ndquadrant.com>
2020-08-24 14:22 ` Re: Document "59.2. Built-in Operator Classes" have a clerical error? Bruce Momjian <bruce@momjian.us>
2020-08-24 15:59 ` Re: Document "59.2. Built-in Operator Classes" have a clerical error? Alvaro Herrera <alvherre@2ndquadrant.com>
2020-08-24 16:01 ` Re: Document "59.2. Built-in Operator Classes" have a clerical error? Bruce Momjian <bruce@momjian.us>
2020-08-25 04:44 ` Re: Document "59.2. Built-in Operator Classes" have a clerical error? Michael Paquier <michael@paquier.xyz>
2020-08-25 14:06 ` Re: Document "59.2. Built-in Operator Classes" have a clerical error? Bruce Momjian <bruce@momjian.us>
2020-08-25 22:10 ` Re: Document "59.2. Built-in Operator Classes" have a clerical error? Alvaro Herrera <alvherre@2ndquadrant.com>
2020-08-25 22:17 ` Re: Document "59.2. Built-in Operator Classes" have a clerical error? Tom Lane <tgl@sss.pgh.pa.us>
2020-08-26 06:56 ` Re: Document "59.2. Built-in Operator Classes" have a clerical error? Michael Paquier <michael@paquier.xyz>
2020-08-26 21:58 ` Re: Document "59.2. Built-in Operator Classes" have a clerical error? Alvaro Herrera <alvherre@2ndquadrant.com>
2020-08-26 22:17 ` Re: Document "59.2. Built-in Operator Classes" have a clerical error? Tom Lane <tgl@sss.pgh.pa.us>
2020-08-26 22:39 ` Re: Document "59.2. Built-in Operator Classes" have a clerical error? Bruce Momjian <bruce@momjian.us>
2020-08-26 22:58 ` Re: Document "59.2. Built-in Operator Classes" have a clerical error? Alvaro Herrera <alvherre@2ndquadrant.com>
2020-08-26 23:19 ` Re: Document "59.2. Built-in Operator Classes" have a clerical error? Tom Lane <tgl@sss.pgh.pa.us>
2020-08-27 06:33 ` Re: Document "59.2. Built-in Operator Classes" have a clerical error? Michael Paquier <michael@paquier.xyz>
2020-08-27 16:07 ` Re: Document "59.2. Built-in Operator Classes" have a clerical error? Alvaro Herrera <alvherre@2ndquadrant.com>
2020-08-28 08:02 ` Re: Document "59.2. Built-in Operator Classes" have a clerical error? Michael Paquier <michael@paquier.xyz>
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox