web-dev-qa-db-ja.com

除外制約「EXCLUDE USING Gist(c WITH &&)」とはどういう意味ですか?

PostgreSQLドキュメントから

除外制約は、指定された演算子を使用して指定された列または式で2行が比較された場合、これらの演算子比較の少なくとも1つがfalseまたはnullを返すようにします。構文は次のとおりです。

_CREATE TABLE circles (
    c circle,
    EXCLUDE USING Gist (c WITH &&)
);
_

EXCLUDE USING Gist (c WITH &&)の意味を知りたいですか?特に、Gist()、_c WITH &&_および_EXCLUDE USING_。

checkの観点から書き換えることはできますか?ありがとう。

14
user3284469

CHECK制約はテーブルの単一行に基づいて式を評価しますが、EXCLUDE制約はテーブル内の2行の比較を評価します。一般化されたUNIQUE制約のように考えてください:「2つの行を等しくすることはできません」の代わりに、「2つの行が重複しない」または「2つの行がdifferent」。

可能なすべての値の組み合わせをチェックせずにこれを実現するには、行を挿入または更新するときに違反の可能性を見つけることができる適切なインデックス構造が必要です。これは、宣言のGist部分が参照するものです: 特定のタイプのインデックス 。これは、平等以外の操作を高速化するために使用できます。

宣言の残りは制約そのものです。cはテスト対象の列であり、_&&_は行のペアに対してtrueを返してはならない演算子です。この場合、_&&_は、幾何演算子のマニュアルページにリストされているように、「重複」演算子 です

まとめると、制約EXCLUDE USING Gist (c WITH &&)は「cの2つの値は互いに重複してはなりません(より正確には、_A.c && B.c_はすべての個別の行に対してfalseまたはnullを返す必要がありますAおよびB)、およびGistインデックスを使用してこの制約を監視してください」。

18
IMSoP