PostgreSQL 8.0.0 文書
前のページ | 巻戻し |  | 早送り | 次のページ

# CREATE OPERATOR CLASS

## 名前

CREATE OPERATOR CLASS -- 新しい演算子クラスの定義

## 概要

    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`では、インデックスメソッドに必要な全ての演算子および関数が、演算子クラス定義に含まれているかどうかを検査しません。 ユーザの責任において、有効な演算子クラスを定義してください。

詳細については項31.14を参照してください。

## パラメータ

`name`

  作成する演算子クラスの名前です。 演算子クラス名は、スキーマ修飾することができます。

`DEFAULT`

  DEFAULTを付けると、その演算子クラスが、そのデータ型のデフォルトのインデックス演算子クラスになります。 特定のデータ型およびインデックスメソッドのデフォルトにできるのは、最大でも1つの演算子クラスのみです。

`data_type`

  この演算子クラスを使用する列のデータ型です。

`index_method`

  この演算子クラスを使用するインデックスメソッドの名前です。

`strategy_number`

  演算子クラスに関連する演算子のインデックスメソッドの戦略番号です。

`operator_name`

  演算子クラスに関連する演算子の名前です(スキーマ修飾名でも可)。

`op_type`

  演算子の入力データ型、もしくは、左単項演算子か右単項演算子を表す`NONE`を指定します。 演算子クラスのデータ型と同じである通常の場合には、入力データ型は省略可能です。

`RECHECK`

  RECHECKを付けると、インデックスが演算子に対して"損失の多い"状態であることを示します。 従って、インデックスを使用して抽出された行がこの演算子を含む条件句を実際に満たしているかを検証するために、この行を再度検査する必要があります。

`support_number`

  演算子クラスに関連する関数用のインデックスメソッドのサポートプロシージャの番号です。

`funcname`

  演算子クラス用のインデックスメソッドのサポートプロシージャである関数の名前です (スキーマ修飾名でも可)。

`argument_types`

  関数のパラメータのデータ型です。

`storage_type`

  インデックスに実際に格納されるデータ型です。 通常、このデータ型は列のデータ型と同じです。 しかし、異なるデータ型を許すインデックスメソッドもあります(執筆時にはGiSTのみ)。 インデックスメソッドで異なるデータ型の使用を許可していなければ、`STORAGE`句を省略する必要があります。

`OPERATOR`、`FUNCTION`、`STORAGE`は任意の順番で記述できます。

## 注釈

演算子はSQL関数で定義してはなりません。 SQL関数はよく呼び出し元の問い合わせにインライン化されますので、オプティマイザでその問い合わせがインデックスに一致するかどうかを認識できなくなってしまいます。

## 例

以下のコマンド例では、`_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);

## 互換性

`CREATE OPERATOR CLASS`はPostgreSQLの拡張です。 標準SQLには`CREATE OPERATOR CLASS`文はありません。

## 関連項目

ALTER OPERATOR CLASS, DROP OPERATOR CLASS

前のページ | ホーム | 次のページ
CREATE OPERATOR | 上に戻る | CREATE RULE