2014-12-27 109 views
1

我嘗試將數據庫轉儲到另一個數據庫。表中有一些重複的唯一值。當pg_dump嘗試將這個項目添加到db時,它會拋出一個錯誤並退出。錯誤就像;轉儲數據庫時跳過違反唯一約束

ERROR: duplicate key value violates unique constraint "test_table_pkey" 
DETAIL: Key (pktable)=(col11) already exists. 
CONTEXT: COPY test_table, line 1: "col11 col12" 

我的表是;

Column |   Type   | Modifiers 
-------------+-----------------------+----------- 
pktable  | text     | not null 
source  | text     | not null 
Indexes: 
    "test_table_pkey" PRIMARY KEY, btree (pktable) 

我的命令是;

pg_dump -U postgres -v --data-only <db_name> | psql -U postgres -h <remote_host> -d <db_name> 

我想讓pg_dump跳過重複的唯一值並繼續轉儲操作。我怎樣才能做到這一點?

+0

如果密鑰是相同的,但行的其餘部分是不同的? –

+0

在我的情況下,如果鍵是相同的,所有的行也必須相同。然而,這條Lajos寫的規則可能會導致我的情況出現其他問題。 – umut

+0

規則會導致什麼問題? –

回答

2

我認爲這條規則可以幫助您:

CREATE RULE "my_table_on_duplicate_ignore" AS ON INSERT TO "my_table" 
    WHERE EXISTS(SELECT 1 FROM my_table 
       WHERE (pk_col_1, pk_col_2)=(NEW.pk_col_1, NEW.pk_col_2)) 
    DO INSTEAD NOTHING; 

基本上INSTEAD NOTHING是,如果新插入的行已經在表觸發。

(在此基礎上:https://stackoverflow.com/a/6176044/1665673