用于插入的Postgres 10和11规范说:
ON CONFLICT [冲突目标]冲突行动
我有一张桌子:
create table c (
e text not null,
m text not null,
v numeric not null,
PRIMARY KEY (e, m)
)
我想做
insert into candle values (...)
on conflict do update set
v = 5
但是我得到一个错误:
在CONFLICT DO UPDATE上需要推理规范或约束名称 提示:例如,ON CONFLICT(column_name)
为什么我必须提供一个冲突目标?如何提供主键或其他一组列?
答案 0 :(得分:2)
您可能有多个约束,因此有多个替代操作。
您只需指定列名:
insert into candle values (...)
on conflict (e,m) do update set
v = 5
答案 1 :(得分:1)
是的,conflict_target
是可选的,但只能与DO NOTHING
一起使用。
对于
ON CONFLICT DO NOTHING
,可以选择指定conflict_target
;如果省略,则处理与所有可用约束(和唯一索引)的冲突。对于ON CONFLICT DO UPDATE
,必须提供conflict_target
。