インデックスは、列値の一意性や、複数列を組み合わせた値の一意性を強制するためにも使用できます。
CREATE UNIQUE INDEX name ON table (column [, ...]);
現在、一意インデックスとして宣言できるのはB-treeインデックスのみです。
一意インデックスが宣言された場合、同じインデックス値を有する複数のテーブル行は許されなくなります。 NULL 値は同じ値とはみなされません。 複数列の一意インデックスは、複数の行でインデックス列の全てが同一の場合のみ拒絶されます。
PostgreSQLでは、テーブルに一意性制約またはプライマリキーが定義されると、自動的に一意インデックスを作成します。 このインデックスが、プライマリキーや一意性制約(適切ならば複数列のインデックスで)となる列に対して作成され、この制約を強制する機構となります。
注意: テーブルに一意性制約を追加するためによく使用される方法は、ALTER TABLE ... ADD CONSTRAINTです。 一意性制約を課すためのインデックスの用法は、直接アクセスしてはならない実装の詳細とみなされることがあります。 しかし、手作業で一意列に対しインデックスを作成する必要がないことには注意してください。 これは、単に自動作成されるインデックスを二重にするだけです。