pg_amop
The catalog pg_amop
stores information about
operators associated with access method operator families. There is one
row for each operator that is a member of an operator family. A family
member can be either a search operator or an
ordering operator. An operator
can appear in more than one family, but cannot appear in more than one
search position nor more than one ordering position within a family.
(It is allowed, though unlikely, for an operator to be used for both
search and ordering purposes.)
Table 51.4. pg_amop
Columns
Name | Type | References | Description |
---|---|---|---|
oid | oid | Row identifier (hidden attribute; must be explicitly selected) | |
amopfamily | oid |
| The operator family this entry is for |
amoplefttype | oid |
| Left-hand input data type of operator |
amoprighttype | oid |
| Right-hand input data type of operator |
amopstrategy | int2 | Operator strategy number | |
amoppurpose | char | Operator purpose, either s for search or
o for ordering | |
amopopr | oid |
| OID of the operator |
amopmethod | oid |
| Index access method operator family is for |
amopsortfamily | oid |
| The B-tree operator family this entry sorts according to, if an ordering operator; zero if a search operator |
A “search” operator entry indicates that an index of this operator
family can be searched to find all rows satisfying
WHERE
indexed_column
operator
constant
.
Obviously, such an operator must return boolean
, and its left-hand input
type must match the index's column data type.
An “ordering” operator entry indicates that an index of this
operator family can be scanned to return rows in the order represented by
ORDER BY
indexed_column
operator
constant
.
Such an operator could return any sortable data type, though again
its left-hand input type must match the index's column data type.
The exact semantics of the ORDER BY
are specified by the
amopsortfamily
column, which must reference
a B-tree operator family for the operator's result type.
At present, it's assumed that the sort order for an ordering operator
is the default for the referenced operator family, i.e., ASC NULLS
LAST
. This might someday be relaxed by adding additional columns
to specify sort options explicitly.
An entry's amopmethod
must match the
opfmethod
of its containing operator family (including
amopmethod
here is an intentional denormalization of the
catalog structure for performance reasons). Also,
amoplefttype
and amoprighttype
must match
the oprleft
and oprright
fields of the
referenced pg_operator
entry.