インデックス定義では、インデックスのそれぞれの列に演算子クラスを指定することができます。
CREATE INDEX name ON table (column opclass [, ...]);
演算子クラスにより、その列のインデックスで使用される演算子が特定されます。 たとえば、4 バイトの整数につけた B-tree インデックスには、int4_ops クラスを使用します。この演算子クラスには、4 バイト整数の比較関数が含まれています。 実際には、通常、列のデータ型のデフォルト演算子クラスで十分です。 演算子クラスの主な意義は、使う目的によって異なる方法で並べ替える必要があるデータ型での使用です。 たとえば、複素数データ型を、絶対値と実数部のどちらかでソートする必要があるとします。 この処理は、データ型の 2 つの演算子クラスを定義したうえで、インデックスを作成する際に適切なクラスを選択することで、実行可能です。 ほかにも、特別な目的に使用する演算子クラスが、以下のようにいくつかあります。
演算子クラス box_ops および bigbox_ops は、両方とも R-tree インデックスの box データ型をサポートしています。 これらの違いは、bigbox_ops は、非常に大きな浮動小数点の座標で積算、加算、および減算することによって浮動小数点の例外が発生することを回避するため、矩形 (box) 座標を縮小するという点です。 もし矩形があるフィールドが 20,000 ユニット平方かそれ以上の場合は、bigbox_ops を使用してください。
以下の問い合わせは、定義済みの演算子クラスをすべて返します。
SELECT am.amname AS acc_method, opc.opcname AS ops_name FROM pg_am am, pg_opclass opc WHERE opc.opcamid = am.oid ORDER BY acc_method, ops_name;
この問い合わせは、以下のようにすると、各クラスに含まれる演算子をすべて返すように拡張可能です。
SELECT am.amname AS acc_method, opc.opcname AS ops_name, opr.oprname AS ops_comp FROM pg_am am, pg_opclass opc, pg_amop amop, pg_operator opr WHERE opc.opcamid = am.oid AND amop.amopclaid = opc.oid AND amop.amopopr = opr.oid ORDER BY acc_method, ops_name, ops_comp;