插入多值查询并跳过重复键Vals

时间:2018-03-29 14:16:08

标签: postgresql postgresql-9.3 upsert

我有以下声明

从my_table中选择id,title

返回一个id和标题列表,我需要将其作为新记录插入另一个表中:

insert another_table (key1, key2, title) 
value                ('1', '5555', 'first'), 
                     ('2', '5555', 'second'), 
                     ('3', '5555', 'thirds'),
                     ('4', '5555', 'fourth')

key1和key2一起是键值,因此如果前一语句中设置的值在已经使用过的这两个id的编译中运行,则会发生pg sql错误。我查看了Merge解决方案,但我不确定如何将它与我的多值语句一起使用。你可以用这个资产我,或者建议一个好的,近乎解决方案吗?我需要它,以便我仍然可以在一个查询中插入多个值。

由于

1 个答案:

答案 0 :(得分:0)

PostgreSQL 9.4 +

假设您有主键,请使用ON CONFLICT子句:

insert into another_table (key1, key2, title) 
values               ('1', '5555', 'first'), 
                     ('2', '5555', 'second'), 
                     ('3', '5555', 'thirds'),
                     ('4', '5555', 'fourth'),
                     ('4', '5555', 'fourth')
                     on conflict do nothing;

在上面的陈述中, key1 (我的理解中的PK)值为 4 两次,但只存储了一次:

select * from another_table;

 key1 | key2 | title  
------+------+--------
 1    | 5555 | first
 2    | 5555 | second
 3    | 5555 | thirds
 4    | 5555 | fourth