2011-08-01 29 views
1

この質問は複数の人から聞かれましたが、私の問題は異なるようです。
実際、postgresqlの異なるデータベースの同じ構造化テーブルを新しいDBにマージする必要があります。私は何をやっていることは、私はデータベース・リンクを使用してdbのリモートに接続することであるDBにそのテーブルを読み込み、postgresql:エラー重複キー値が一意制約に違反しています

INSERT INTO t_types_of_dementia SELECT * FROM dblink('host=localhost port=5432 dbname=snap-cadence password=xxxxxx', 'SELECT dementia_type, snapid FROM t_types_of_dementia') as x(dementia_type VARCHAR(256),snapid integer); 

このクエリが正常に動作が、私は実行したときに初めて、以下のように現在のDB内のテーブルに挿入しますそれはいくつかの他のリモートデータベースのテーブルでそれを実行しようと再びか:それは私がこの新しいテーブルが他のDBSから他人のテーブルのエントリによって移入されることを望ん

ERROR: duplicate key value violates unique constraint "t_types_of_dementia_pkey"

私は、このエラーが発生します。 シーケンスに関するソリューション提案協議のいくつかが、私は現在のDB内のテーブルの構造は

CREATE TABLE t_types_of_dementia(
    dementia_type VARCHAR(256), 
    snapid integer NOT NULL, 
    PRIMARY KEY (dementia_type,snapid) 
); 

P.S.ある任意の

を使用していません両方の列がプライマリキーとして使用される特定の理由があります。これは、この問題が発生していない他のテーブルでも同じ問題が発生するため、このディスカッションでは関連しない可能性があります。

答えて

1

エラーメッセージには、dementia_type, snapidの列に同じ値を持つ2つの行を持つことができないため、一意にする必要があるためです。

dementia_type, snapidの2つのデータベースの値が同じであることを確認する必要があります。

回避策は、テーブルalter table t_types_of_dementia add column id serial generated alwaysに列を追加し、それを現在のキーではなくプライマリキーとして使用することです。

+0

ありがとう@Jonas。この制約を緩和するための回避策がありますか? – Shehroz

+0

@Shehroz:別の主キーを使う必要があります。私の更新を見てください。 – Jonas

+0

@ Jonas-あなたのポインタをありがとう。他の表では、ケースは異なるかもしれませんが、私はあなたの中心的な考えを得ます。 – Shehroz