PostgreSQL 7.2.1 Documentation
Prev | Chapter 17. Interfacing Extensions To Indexes | Next

# 17.5. Operator Classes

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.

Prev | Home | Next
Access Method Support Routines | Up | Creating the Operators and Support Routines