他のバージョンの文書 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

14.7. 演算子クラスの特殊な機能

演算子クラスには、まだ説明していない 2 つの特殊な機能があります。説明していない主な理由は、デフォルトの B-tree インデックスアクセスメソッドでは、これらがあまり有用ではないためです。

通常、演算子を演算子クラスのメンバとして宣言すると、インデックスアクセスメソッドでその演算子を使用して、WHERE 条件を満たす行のセットを正確に抽出することができます。以下に例を示します。

SELECT * FROM table WHERE integer_column < 4;

この式は、整数列に B-tree インデックスを使用することにより、正確に満たすことができます。 しかし、マッチする行へのあいまいなガイドとして、インデックスが有用である場合があります。 たとえば、R-tree インデックスでは、オブジェクトの境界ボックスのみを格納します。その結果、多角形のような長方形でないオブジェクトをオーバーラップしてテストする WHERE 条件を正確に満たすことができません。 もっとも、インデックスを使用して、ターゲットオブジェクトの境界ボックスにオーバーラップする境界ボックスを持つオブジェクトを検索し、その上で検索されたオブジェクトのみに正確なオーバーラップテストを行うことはできます。 このような場合、インデックスは、演算子に対して「無駄が多い」ということになります。そこで、CREATE OPERATOR CLASS コマンドの OPERATOR 句に、RECHECK を追加します。 RECHECK は、インデックスが、すべての必要なタプル、およびおそらくいくつかの追加のタプルを返すことを保証されている場合に、有効です。この追加のタプルは、元の演算子との比較を実行することによって除外できます。

再度、多角形のような複合オブジェクトの境界ボックスのみをインデックスに格納している状況を考えてみてください。 この場合、インデックスエントリに多角形全体を格納するのは、それ程有用なことではありません。単に、よりシンプルな box 型のオブジェクトを格納した方が良いかもしれません。 上記のような状況は、CREATE OPERATOR CLASSSTORAGE オプションによって表示することができます。 たとえば、以下のように記述します。

CREATE OPERATOR CLASS polygon_ops
    DEFAULT FOR TYPE polygon USING gist AS
        ...
        STORAGE box;

現時点では、GiST アクセスメソッドのみが、列のデータ型と異なる STORAGE 型をサポートしています。 STORAGE が使用された場合、GiST の compress および decompress サポートルーチンにより、データ型を変換する必要があります。