無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

CREATE OPERATOR CLASS

名前

CREATE OPERATOR CLASS --  新しい演算子クラスを定義する

概要

CREATE OPERATOR CLASS 

name

 [ DEFAULT ] FOR TYPE 

data_type


  USING 

index_method

 [ FAMILY 

family_name

 ] AS
  {  OPERATOR 

strategy_number

 

operator_name

 [ ( 

op_type

, 

op_type

 ) ] [ FOR SEARCH | FOR ORDER BY 

sort_family_name

 ]
   | FUNCTION 

support_number

 [ ( 

op_type

 [ , 

op_type

 ] ) ] 

function_name

 ( 

argument_type

 [, ...] )
   | STORAGE 

storage_type


  } [, ... ]

説明

CREATE OPERATOR CLASS は新しい演算子クラスを作成します。 演算子クラスは、特定のデータ型がインデックスでどのように使用されるかを定義します。 演算子クラスにより、データ型およびインデックスメソッドの特定の役割もしくは "戦略" に、どの演算子を使用するかが指定されます。 また、インデックスの列に対して演算子クラスが選択される際、演算子クラスによってインデックスメソッドが使用するサポートプロシージャが指定されます。 演算子クラスで使用される全ての演算子および関数は、演算子クラスを作成できるようになる前に定義しておく必要があります。

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

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

現在、 CREATE OPERATOR CLASS では、インデックスメソッドに必要な全ての演算子および関数が演算子クラス定義に含まれているかどうか、また、演算子や関数の形式がそれ自身で整合性を持っているかを検査しません。 ユーザの責任において、有効な演算子クラスを定義してください。

関連する演算子クラスを 演算子族 にまとめることができます。 既存の演算子族に新しい演算子クラスを追加するためには、 CREATE OPERATOR CLASS FAMILY オプションを指定してください。 このオプションを指定しないと、新しい演算子クラスはそのクラスと同じ名前の演算子族内に置かれます(もしこの演算子族が存在しない場合は演算子族を作成します)。

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

パラメータ

name

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

DEFAULT

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

data_type

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

index_method

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

family_name

新規作成クラスの追加先となる既存の演算子族の名前です。 指定されない場合、演算子クラスと同じ名前の演算子族が使用されます(存在しない場合は演算子族を作成します)。

strategy_number

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

operator_name

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

op_type

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

FUNCTION 句では、関数の入力データ型(B-Tree比較関数およびハッシュ関数用)またはクラスのデータ型(B-treeソートサポート関数とGiST、SP-GiST、GIN演算子クラスのすべての関数用)と異なる場合、関数がサポートする予定の演算対象データ型です。 これらのデフォルトは常に正確です。 このため、しかしデータ型を跨がる比較をサポートする予定のB-treeソートサポート関数は除き、 FUNCTION 句で op_type を指定する必要はありません。

sort_family_name

順序付け演算子に関連したソート順序を記述する、既存の btree 演算子族の名前(スキーマ修飾可)です。

FOR SEARCH FOR ORDER BY も指定されていない場合、 FOR SEARCH がデフォルトです。

support_number

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

function_name

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

argument_type

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

storage_type

インデックスに実際に格納されるデータ型です。 通常、このデータ型は列のデータ型と同じです。 しかし、異なるデータ型を許可するインデックスメソッドも存在します(現時点ではGiSTとGIN)。 インデックスメソッドが異なるデータ型の使用を許可していなければ、 STORAGE 句を指定してはいけません。

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

注釈

インデックス機構は、使用する前に関数に関するアクセス権限を検査しませんので、 関数や演算子を演算子クラスに含めることは、PUBLICに実行権限を与えることと同じです。 通常、演算子クラスで有用な種類の関数ではこれは問題になりません。

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

PostgreSQL 8.4より前までは、 OPERATOR 句に RECHECK オプションを含めることができました。 インデックス演算子に "損失がある" かどうかは実行時にその場で決定されるようになりましたので、これはサポートされなくなりました。 これにより、演算子に損失があるかもしれないしないかもしれないような場合を効率的に扱うことができるようになりました。

以下のコマンド例では、 _int4 データ型( int4 の配列)のGiSTインデックス演算子クラスを定義しています。 この例の詳細については、 intarray モジュールを参照してください。

CREATE OPERATOR CLASS gist__int_ops
    DEFAULT FOR TYPE _int4 USING gist AS
        OPERATOR        3       &&,
        OPERATOR        6       = (anyarray, anyarray),
        OPERATOR        7       @>,
        OPERATOR        8       <@,
        OPERATOR        20      @@ (_int4, query_int),
        FUNCTION        1       g_int_consistent (internal, _int4, int, oid, internal),
        FUNCTION        2       g_int_union (internal, 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 FAMILY , ALTER OPERATOR FAMILY

powered by SEO.CUG.NET