2016-10-17 2 views
2

テーブルに新しいCONSTRAINTを追加することには少し問題があります。
UNIQUE CONSTRAINTを追加して、テーブルの既存のデータを検証しません。PostgreSQL - CONSTRAINT UNIQUEを追加して既存のデータを検証しない

私は既存のデータにいくつかの重複があり、そのまま残したいと思います。

私は、クエリ書いた:

ALTER TABLE tbl1 
    ADD CONSTRAINT unique_const UNIQUE (fld1, fld2) NOT VALID; 

をしかし、それは働いていない、私はエラーを得た:

UNIQUE constraints cannot be marked NOT VALID

私はまた、すべてのTIGGERS削除しようとした:

ALTER TABLE tbl1 DISABLE TRIGGER all; 
ALTER TABLE tbl1 ADD CONSTRAINT unique_const UNIQUE (fld1, fld2); 
ALTER TABLE tbl1 ENABLE TRIGGER all; 

しかし、それをまた動作しません。

既存の行を検証せずにUNIQUE CONSTRAINTを追加する方法を知っている人はいますか?

答えて

0

documentation of PostgreSQL 9.6によれば、残念ながらNOT VALIDオプションは現在、外部キーとCHECKの制約でのみ許可されています。 This StackOverflow thread hereは関連しており、それはあなたが、具体的制約のために無視されるべきであるそれらのラインを識別できる場合は、部分的に一意のインデックスを追加することができます2014年

+0

これは9.5と9.6でも当てはまります –

+0

ありがとうございます。それを編集しました。 :) – mxscho

0

からだものの、代替ソリューションのためのアイデア/基本的なアプローチを提供することがあります

CREATE UNIQUE INDEX ON table (columns) WHERE some_condition; 

既存の直接条件がない場合は、無視する必要のある行を特定するために列を追加する必要があります(新しい行が数えられるように、適切な既定値を使用してください)。

相当のALTER TABLEの構文があるかどうかはわかりません。

関連する問題