次の表があります。
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
制約を追加する方法はありますか?
psql
のインラインヘルプ:
\h ALTER TABLE
postgres docs (優れたリソースに加えて、読みやすい)にも記載されています。
ALTER TABLE tablename ADD CONSTRAINT constraintname UNIQUE (columns);
はい、できます。ただし、テーブルに一意でないエントリがある場合、失敗します。以下は、テーブルにユニーク制約を追加する方法です。 PostgreSQL 9.xを使用している場合、以下の指示に従うことができます。
CREATE UNIQUE INDEX constraint_name ON table_name (columns);
はい、事後にUNIQUE制約を追加できます。ただし、テーブルに一意でないエントリがある場合、Postgresは修正するまで文句を言います。
すでに「名前と姓」に基づく既存の制約が設定されているテーブルがあり、一意の制約をもう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);