首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >insert查询中有多个“in CONFLICT`”

insert查询中有多个“in CONFLICT`”
EN

Stack Overflow用户
提问于 2021-10-05 15:46:21
回答 1查看 51关注 0票数 0

我有一个表,其中有像id, name, start_date, end_date这样的列,以及2个唯一约束unique(id, name, start_date)unique(id, name, end_date)

现在,当我为这个表编写insert查询时,我的代码如下

代码语言:javascript
复制
insert into table (id, name, start_date, end_date)
values (1, 'test', 'example-start-date', 'example-end-date')
on conflict (id, name, start_date) set something
on conflict (id, name, end_date) set something

但是得到错误,这是不允许的吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-10-05 16:23:37

答案取决于something

对于

  • DO NOTHING,答案是简单地使用单个子句,而不指定列:

在冲突中什么都不做

可以处理多个唯一约束上的冲突。

对于

您可以使用过程代码以传统的方式完成此操作,例如在PL/pgSQL中:

声明v_constraint文本;BEGIN loop --无限循环,直到INSERT或UPDATE成功,BEGIN INSERT INTO ...;EXIT;-- leave LOOP if INSERT succeeds WHEN unique_violation THEN GET STACKED DIAGNOSTICS v_constraint := CONSTRAINT_NAME;END;CASE v_constraint WHEN 'constraint_name_1‘THEN UPDATE ...;WHEN 'constraint_name_2‘THEN UPDATE ...;END CASE;找到时退出;--如果UPDATE更改了行,则离开循环END LOOP;END;

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69453553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档