★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

CREATE OPERATOR CLASS

Name

CREATE OPERATOR CLASS  --  インデックスに新しい演算子クラスを定義

Synopsis

CREATE OPERATOR CLASS name [ DEFAULT ] FOR TYPE data_type USING access_method AS
  {  OPERATOR strategy_number operator_id [ ( type, type ) ] [ RECHECK ]
   | FUNCTION support_number func_name ( parameter_types )
   | STORAGE storage_type
  } [, ... ]
  

入力

name

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

DEFAULT

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

data_type

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

access_method

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

strategy_number

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

operator_id

演算子クラスに関連する演算子の識別子です (オプションでスキーマ修飾することができます)。

type

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

RECHECK

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

support_number

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

func_name

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

parameter_types

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

storage_type

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

出力

CREATE OPERATOR CLASS

演算子クラスの作成に成功した場合に返されるメッセージです。

説明

CREATE OPERATOR CLASS を実行すると、新しい演算子クラスである name を定義できます。

演算子クラスにより、特定のデータ型がインデックスでどのように使用されるかが定義されます。 演算子クラスにより、このデータ型およびアクセスメソッドの特定のロールもしくは「戦略」に、どの演算子を使用するかが指定されます。 また、演算子クラスにより、インデックスの列に演算子クラスを選択する際、インデックスアクセスメソッドで使用するサポートプロシージャが指定されます。 演算子クラスで使用されるすべての演算子および関数は、演算子クラスを作成する前に定義しておく必要があります。

スキーマ名が与えられている場合、その演算子クラスは指定されたスキーマで作成されます。 スキーマ名がなければ、演算子クラスは現在のスキーマ (検索パスの前にあるスキーマ。CURRENT_SCHEMA() 参照) で作成されます。 異なるインデックスアクセスメソッドに使用する場合には、同じスキーマ内の 2 つの演算子クラスに同じ名前を付けることができます。

演算子クラスを定義したユーザが、その所有者となります。 現在、演算子クラスを作成するユーザは、スーパーユーザである必要があります。 (誤った演算子クラスを定義すると、混乱の元となり、サーバクラッシュの原因とさえなり得るため、この制限が付けられています。)

現在、CREATE OPERATOR CLASS では、インデックスアクセスメソッドに必要なすべての演算子および関数が、クラス定義に含まれているかどうかをチェックしません。 ユーザの責任において、有効な演算子クラスを定義してください。

詳細については、PostgreSQL プログラマガイドの「インデックス拡張機能へのインタフェース」の章を参照してください。

注釈

ユーザ定義の演算子クラスをデータベースから削除する場合は、DROP OPERATOR CLASS を参照してください。

使用方法

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

OPERATORFUNCTION、および STORAGE 句の順序は、変更可能です。

互換性

SQL92

CREATE OPERATOR CLASSPostgreSQL の拡張です。 SQL92 には CREATE OPERATOR CLASS 文はありません。