排他制約
一意性の一般化。「同じ値を持つ行が2つあってはならない」の代わりに、「重なる」「交差する」「近すぎる」行があってはならない、と指定できる。
ユニークインデックスは、演算子がたまたま等価になっている特殊な場合にすぎない。PostgreSQLではインデックス型が対応する任意の演算子を選べるので、宣言的には書けなかった条件も表現できる。定番の例が予約で、EXCLUDE USING gist (room WITH =, during WITH &&)と書けば、同じ部屋で時間範囲が重なる行を同時に持てなくなる。アプリケーション側で「空いているか確認してから書き込む」方式は、アクセスが十分に増えれば必ず発生する競合状態を抱えている。通常の列の等価比較と範囲の重なり判定を組み合わせるには、btree_gist拡張が必要になる。