Postgres 10和11规格插入说:
ON CONFLICT [conflict_target] conflict_action
我有一张桌子:
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
但是我收到一个错误:
ON CONFLICT DO UPDATE需要推理规范或约束名称提示:例如,ON CONFLICT(column_name)
为什么我必须提供相互冲突的目标?如何提供主键或其他一组列?
您可以有多个约束,因此可以有多个替代操作。
您只需指定列名称:
insert into candle values (...)
on conflict (e,m) do update set
v = 5
是的,conflict_target
是可选的,但只有DO NOTHING
。
对于
ON CONFLICT DO NOTHING
,可以选择指定conflict_target
;省略时,处理与所有可用约束(和唯一索引)的冲突。对于ON CONFLICT DO UPDATE
,必须提供conflict_target
。