web-dev-qa-db-ja.com

PostgreSQLテーブルを作成した後、PostgreSQLテーブルにUNIQUE制約を追加できますか?

次の表があります。

 tickername | tickerbbname  | tickertype
------------+---------------+------------
 USDZAR     | USDZAR Curncy | C
 EURCZK     | EURCZK Curncy | C
 EURPLN     | EURPLN Curncy | C
 USDBRL     | USDBRL Curncy | C
 USDTRY     | USDTRY Curncy | C
 EURHUF     | EURHUF Curncy | C
 USDRUB     | USDRUB Curncy | C

特定のtickername/tickerbbnameペアに対して複数の列が存在することは望ましくありません。私はすでにテーブルを作成し、その中にたくさんのデータを持っています(これは一意の基準を満たしていることを既に確認しています)。ただし、サイズが大きくなるにつれて、エラーの余地が忍び寄ってきます。

この時点でUNIQUE制約を追加する方法はありますか?

161
Thomas Browne

psqlのインラインヘルプ:

\h ALTER TABLE

postgres docs (優れたリソースに加えて、読みやすい)にも記載されています。

ALTER TABLE tablename ADD CONSTRAINT constraintname UNIQUE (columns);
319
hhaamu

はい、できます。ただし、テーブルに一意でないエントリがある場合、失敗します。以下は、テーブルにユニーク制約を追加する方法です。 PostgreSQL 9.xを使用している場合、以下の指示に従うことができます。

CREATE UNIQUE INDEX constraint_name ON table_name (columns);
31
Zeck

はい、事後にUNIQUE制約を追加できます。ただし、テーブルに一意でないエントリがある場合、Postgresは修正するまで文句を言います。

5
Jordan S. Jones

すでに「名前と姓」に基づく既存の制約が設定されているテーブルがあり、一意の制約をもう1つ追加したい場合は、次の方法で制約全体を削除する必要がありました。

ALTER TABLE your_table DROP CONSTRAINT constraint_name;

追加する新しい制約がそのテーブルのすべてのデータで一意であるか、nullではないことを確認します(Microsoft Sqlの場合、null値を1つだけ含むことができます)。その後、再作成できます。

ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... column_n);
4
Lucas Campos