The next table of interest is pg_opclass
. This table
defines operator class names and input data types for each of the operator
classes supported by a given index access method. The same class name
can be used for several different access methods (for example, both B-tree
and hash access methods have operator classes named
oid_ops), but a separate
pg_opclass row must appear for each access method.
The OID of the pg_opclass
row is
used as a foreign
key in other tables to associate specific operators and support routines
with the operator class.
You need to add a row with your operator class name (for example,
complex_abs_ops) to
pg_opclass
:
INSERT INTO pg_opclass (opcamid, opcname, opcintype, opcdefault, opckeytype) VALUES ( (SELECT oid FROM pg_am WHERE amname = 'btree'), 'complex_abs_ops', (SELECT oid FROM pg_type WHERE typname = 'complex'), true, 0); SELECT oid, * FROM pg_opclass WHERE opcname = 'complex_abs_ops'; oid | opcamid | opcname | opcintype | opcdefault | opckeytype --------+---------+-----------------+-----------+------------+------------ 277975 | 403 | complex_abs_ops | 277946 | t | 0 (1 row)
Note that the OID for your pg_opclass
row will
be different! Don't worry about this though. We'll get this number
from the system later just like we got the OID of the type here.
The above example assumes that you want to make this new operator class the default B-tree operator class for the complex data type. If you don't, just set opcdefault to false instead. opckeytype is not described here; it should always be zero for B-tree operator classes.