2011-08-01 264 views
1

這個問題已經被問幾個人,但我的問題似乎是不同的。
其實我不得不從PostgreSQL中不同的數據庫結構相同的表合併成一個新的數據庫。我在做什麼,是我連接到遠程數據庫使用DBLINK,讀取該表在數據庫,並將其插入到表在當前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); 

首次在此查詢運行正常,但是當我運行再次,或嘗試一些其他的遠程數據庫的表中運行它:它給了我這個錯誤

ERROR: duplicate key value violates unique constraint "t_types_of_dementia_pkey"

我想,這個新表中獲取來自其他DBS其他表的條目填充。 一些解決方案的提出關於序列會談,但我沒有使用任何

表的結構在當前db是

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

附:有兩個列用作主鍵的具體原因可能與本次討論無關,因爲同樣的問題在其他表中並非如此。

回答

1

隨着錯誤消息告訴你 - 你不能在列dementia_type, snapid兩行具有相同的值,因爲它們必須是唯一的。

你必須確保兩個數據庫具有相同的值dementia_type, snapid

一種解決方法將一列添加到您的表alter table t_types_of_dementia add column id serial generated always並用其作爲主鍵,而不是當前的。

+0

感謝@Jonas。是否會有解決這個問題的方法? – Shehroz

+0

@Shehroz:您需要使用另一個主鍵,請參閱我的更新。 – Jonas

+0

@喬納斯 - 感謝您的指點。在其他表格中,情況可能會有所不同,但我明白你的核心思想。 – Shehroz

相關問題