CREATE OPERATOR CLASS name [ DEFAULT ] FOR TYPE data_type USING index_method AS { OPERATOR strategy_number operator_name [ ( op_type, op_type ) ] [ RECHECK ] | FUNCTION support_number funcname ( argument_type [, ...] ) | STORAGE storage_type } [, ... ]
CREATE OPERATOR CLASS は新しい演算子クラスを定義します。 演算子クラスにより、特定のデータ型がインデックスでどのように使用されるかが定義されます。 演算子クラスにより、このデータ型およびインデックスメソッドの特定のロールもしくは"戦略"に、どの演算子を使用するかが指定されます。 また、演算子クラスにより、インデックスの列に演算子クラスを選択する際、インデックスメソッドで使用するサポートプロシージャが指定されます。 演算子クラスで使用されるすべての演算子および関数は、演算子クラスを作成する前に定義しておく必要があります。
スキーマ名が与えられている場合、その演算子クラスは指定されたスキーマで作成されます。 スキーマ名がなければ、演算子クラスは現在のスキーマで作成されます。 異なるインデックスメソッドに使用する場合には、同じスキーマ内の 2 つの演算子クラスに同じ名前を付けることができます。
演算子クラスを定義したユーザが、その所有者となります。 現在、演算子クラスを作成するユーザは、スーパーユーザである必要があります。 (誤った演算子クラスを定義すると、混乱の元となり、サーバクラッシュの原因とさえなり得るため、この制限が付けられています。)
現在、CREATE OPERATOR CLASS では、インデックスメソッドに必要なすべての演算子および関数が、演算子クラス定義に含まれているかどうかをチェックしません。 ユーザの責任において、有効な演算子クラスを定義してください。
詳細については項33.13を参照してください。
作成する演算子クラスの名前です。 演算子クラス名は、スキーマ修飾名にできます。
DEFAULT を付けると、その演算子クラスが、そのデータ型のデフォルトのインデックス演算子クラスになります。 特定のデータ型およびインデックスメソッドのデフォルトにできるのは、最大でも 1 つの演算子クラスのみです。
この演算子クラスを使用する列のデータ型です。
この演算子クラスを使用するインデックスメソッドの名前です。
演算子クラスに関連する演算子のインデックスメソッドの戦略番号です。
演算子クラスに関連する演算子の名前です (オプションでスキーマ修飾することができます)。
演算子の入力データ型、もしくは、左単項演算子か右単項演算子を表す NONE を指定します。 入力データ型は、演算子クラスのデータ型と同じである通常の場合には、省略できます。
RECHECK を付けると、インデックスが演算子に対して"損失の多い"状態であることを示します。 したがって、インデックスを使用して抽出された行がこの演算子を含む条件句を実際に満たしているかを検証するために、この行を再度チェックする必要があります。
演算子クラスに関連する関数用のインデックスメソッドのサポートプロシージャの番号です。
演算子クラス用のインデックスメソッドのサポートプロシージャである関数の名前です (スキーマ修飾名でも可)。
関数のパラメータのデータ型です。
インデックスに実際に格納されるデータ型です。 通常、このデータ型は列のデータ型と同じです。 しかし、異なるデータ型を許すインデックスメソッドもあります (執筆時には GIST のみ)。 STORAGE 句は、インデックスメソッドで異なるデータ型の使用を許可していなければ、省略する必要があります。
OPERATOR、FUNCTION、STORAGE は任意の順番で記述できます。
以下のコマンド例では、データ型 _int4 (int4 の配列) の GiST インデックス演算子クラスを定義しています。 この例の詳細については、contrib/intarray/を参照してください。
CREATE OPERATOR CLASS gist__int_ops DEFAULT FOR TYPE _int4 USING gist AS OPERATOR 3 &&, OPERATOR 6 = RECHECK, OPERATOR 7 @, OPERATOR 8 ~, OPERATOR 20 @@ (_int4, query_int), FUNCTION 1 g_int_consistent (internal, _int4, int4), FUNCTION 2 g_int_union (bytea, internal), FUNCTION 3 g_int_compress (internal), FUNCTION 4 g_int_decompress (internal), FUNCTION 5 g_int_penalty (internal, internal, internal), FUNCTION 6 g_int_picksplit (internal, internal), FUNCTION 7 g_int_same (_int4, _int4, internal);