インデックスは、列値の一意性や、複数列を組み合わせた値の一意性を強制するためにも使用できます。
CREATE UNIQUE INDEXname
ONtable
(column
[, ...]) [ NULLS [ NOT ] DISTINCT ];
現在、一意インデックスとして宣言できるのはB-treeインデックスのみです。
一意インデックスが宣言された場合、同じインデックス値を有する複数のテーブル行は許されなくなります。
デフォルトでは、一意列のNULL値は同じ値とはみなされず、列に複数のNULLが許可されます。
NULLS NOT DISTINCT
オプションはこれを変更し、インデックスでNULLが同等として扱われるようにします。
複数列の一意インデックスは、インデックス列の全てが複数の行で同一の場合のみ拒絶されます。
PostgreSQLでは、テーブルに一意性制約または主キーが定義されると、自動的に一意インデックスを作成します。 このインデックスが、主キーや一意性制約(適切ならば複数列のインデックスで)となる列に対して作成され、この制約を強制する機構となります。
手作業で一意列に対しインデックスを作成する必要はありません。 これは、単に自動作成されるインデックスを二重にするだけです。