2014-12-27 67 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