Indexes can also be used to enforce uniqueness of a column's value, or the uniqueness of the combined values of more than one column. インデックスは、列値の一意性や、複数列を組み合わせた値の一意性を強制するためにも使用できます。
CREATE UNIQUE INDEXname
ONtable
(column
[, ...]) [ NULLS [ NOT ] DISTINCT ];
Currently, only B-tree indexes can be declared unique. 現在、一意インデックスとして宣言できるのはB-treeインデックスのみです。
When an index is declared unique, multiple table rows with equal
indexed values are not allowed. By default, null values in a unique column
are not considered equal, allowing multiple nulls in the column. The
<literal>NULLS NOT DISTINCT</literal> option modifies this and causes the
index to treat nulls as equal. A multicolumn unique index will only reject
cases where all indexed columns are equal in multiple rows.
一意インデックスが宣言された場合、同じインデックス値を有する複数のテーブル行は許されなくなります。
デフォルトでは、一意列のNULL値は同じ値とはみなされず、列に複数のNULLが許可されます。
NULLS NOT DISTINCT
オプションはこれを変更し、インデックスでNULLが同等として扱われるようにします。
複数列の一意インデックスは、インデックス列の全てが複数の行で同一の場合のみ拒絶されます。
<productname>PostgreSQL</productname> automatically creates a unique index when a unique constraint or primary key is defined for a table. The index covers the columns that make up the primary key or unique constraint (a multicolumn index, if appropriate), and is the mechanism that enforces the constraint. PostgreSQLでは、テーブルに一意性制約または主キーが定義されると、自動的に一意インデックスを作成します。 このインデックスが、主キーや一意性制約(適切ならば複数列のインデックスで)となる列に対して作成され、この制約を強制する機構となります。
There's no need to manually create indexes on unique columns; doing so would just duplicate the automatically-created index. 手作業で一意列に対しインデックスを作成する必要はありません。 これは、単に自動作成されるインデックスを二重にするだけです。