当前位置: 首页 > 知识库问答 >
问题:

PostgreSQL在一条upsert语句中多次出现冲突

西门安宁
2023-03-14

我在同一个表上有两个唯一的约束,我想在那个表上做一个upsert语句。

是否可以指定这两个冲突中的上位插入?我看到了这个:如何在Postgres上的冲突上的2列之一上的上位插入?

但是我的问题涉及得更多一些,因为其中一个唯一约束是另一个唯一约束的子集。

unique_constraint_1=(col_1)unqiue_constraint_2=(col_1、col_2)

INSERT INTO table (col_1, col_2, col_3) 
VALUES (val_1, val_2, val_3) 
ON CONFLICT (what do I put here to account for both constraints?) 
DO NOTHING; 

谢谢!

共有1个答案

齐兴运
2023-03-14

根据文档,ON CONFLICT默认覆盖所有唯一约束。

省略时,将处理与所有可用约束(和唯一索引)的冲突

在你的例子中,没有必要像Grzegorz Grabek已经指出的那样,有两个约束。这是因为更严格的单列约束已经覆盖了更宽松的两列约束。

 类似资料:
  • 问题内容: 我需要初始化一个常量HashMap,并希望在一行语句中完成它。避免这样的事情: 类似于目标C: 看了这么多,我还没有找到任何显示如何做到这一点的例子。 问题答案: 您可以使用 Double Brace初始化 ,如下所示: 作为警告,请参阅Java的效率效率“ Double BraceInitialization”,了解它可能带来的性能影响。

  • 我使用的是+++。 我得到了4个DELETE,只想要一个数据库请求,所以我用一个“;”连接了DELETE命令...但总是失败。 它会抛出以下错误: 但如果我将此SQL粘贴到PhpMyAdmin中,它总是成功的... 如果我在单个查询中编写它,它也会成功。 多谢帮忙!

  • 有没有一种方法可以在jdbc postgresql驱动程序的准备好的语句中多次使用同一个变量? 例如,我想使用以下语句,但每个问号的值相同: 有没有一种方法可以简单地在每个变量中使用相同的值?我想到了类似于pypostgresql中的用法,在pypostgresql中,可以简单地说用于每个字段。

  • 本文向大家介绍python实现一次性封装多条sql语句(begin end),包括了python实现一次性封装多条sql语句(begin end)的使用技巧和注意事项,需要的朋友参考一下 python封装利用begin end执行多条sql 因为业务需求,优化模型运行时间。考虑到sql语句每一次执行都要建立连接,查询,获取数据耗时过多。就想到将sql一起提交上去运行,能够节省很多时间。原本1.6-

  • 问题内容: 我有一张调查答案表,类似: 并且我想创建一个查询,该查询将为我提供该表的结果摘要,从而允许我设置相关的日期范围。我下面的声明非常有效: 但是我不确定是否可以做得更好,以及在哪里添加日期范围过滤功能。 问题答案: 来自多刺的诺曼的第一个查询将给出这样的结果: 仅将几组不同的结果分组。我假设您想按问题将是/否的总数分类。在这种情况下,您必须执行以下操作: 结果:

  • 问题内容: 有可能用一个SQL语句,多个表截断吗? 像这样: 问候 问题答案: 不可以,您只能使用TRUNCATE命令截断单个表。要截断多个表,可以使用T-SQL并遍历表名以一次截断每个表名。 您可以在@tableList变量中用逗号分隔所有表名,是的,如果有前缀,则可以截断来自不同模式的多个表。