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

如果Postgres db中的多个列发生冲突,则向上插入

施飞驰
2023-03-14

我在Postgres db中有一个没有主键的表。我想更新两列的组合是否具有相同的值。

...
ON CONFLICT (col1, col2)
DO UPDATE

ELSE 
INSERT
...

没有主键我找不到任何东西。另外,col1和col2的组合是唯一的。col1可以有多行,值相同,col2可以有多行,但一起不能。

我的桌子是这样的:

col1  col2
1     A    
1     B
2     A
2     B

我不能对这两列中的任何一列都有唯一的约束,但将索引以组合方式添加在一起的工作原理如下:

CREATE TABLE example (
col1 integer,
col2 integer,
col3 integer,
UNIQUE (col1, col3));

但是现在,如何处理插入。什么应该是ON CONFLICT条件,因为我们不能有2列,所以回到同一个问题。

共有1个答案

姜杜吟
2023-03-14

实际上,在这里找到了它,但不是在标记为答案的帖子中,而是在评分最高的帖子中。在ON CONFLICT子句中使用多个conflict_target

因此,我们的问题如下:

INSERT into table (col1, col2, col3)
VALUES ('1', 'A', 'colval1A')
ON CONFLICT (col1, col2) DO UPDATE 
SET col3 = 'good_value'
 类似资料:
  • 我目前正在做一个spring boot冬眠。 我需要在mySql数据库中保存一个对象列表,我了解了使用saveAll()和foreach save()进行保存的区别,我可以得出这样的结论:saveAll()要快得多。然而,在例外情况下,例如UK违反,整个进程回滚,并且没有对象将被保存。 更简单地说:我想在一个事务中保存一个object列表,如果有任何约束违反,忽略它并保存其余的。 这是我的实体:

  • 问题内容: 创建Elasticsearch Client时,出现异常java.lang.NoSuchMethodError:com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava / util / concurrent / Executor; 经过一些查找之后,像Guava-18这样的接缝将在运行时被旧版本覆盖,而

  • 问题内容: 我有一个SQL表,其中包含软件包列表(10000个唯一条目的顺序)和任何给定软件包的相应类别(100个唯一条目的顺序)。给定的包可以属于多个类别(15000个唯一组合的顺序,因此是表的大小)的一部分。 所有软件包名称都应该是唯一的,并且不会与类别名称冲突,但是,情况似乎并非如此。 我需要确定10k软件包中的任何一个是否与100个类别中的任何一个都具有相同的名称,如果是,请对所有此类软件

  • 我正在创建一个应用程序3x3 Tic tac toe,其中3x3是所有按钮,在点击监听器上,我正在检查可能的组合,是否两个玩家中的任何一个已经作出了他们的“O”或“X”。但在我的“if-else”部分,它不是检查条件,而是直接执行“if和else”部分,即使条件错误。我希望我的问题是可以理解和调试的。任何帮助都是值得的...

  • 我正在从国家美术馆的在线目录中检索信息。由于目录的结构,我无法通过提取和跟踪条目之间的链接来导航。幸运的是,集合中的每个对象都有一个可预测的url。我希望我的爬行器通过生成开始URL来导航集合。 我试图通过实现这个线程中的解决方案来解决我的问题。不幸的是,这似乎打破了我蜘蛛的另一部分。错误日志显示我的网址正在成功生成,但它们没有被正确处理。如果我正确地解释了日志——我怀疑我没有——在重新定义允许我

  • 问题内容: 考虑一下这个功能: 在每个goroutine中,该函数被调用10次。如果一个调用在任何正在运行的goroutine中返回错误,我希望所有goroutine立即停止,并退出程序。可以在这里使用吗?我该如何处理? 编辑 :此问题与如何停止goroutine不同,因为如果一个错误发生,在这里我需要关闭所有goroutine 问题答案: 您可以使用为此类事情创建的软件包( “带有截止日期,取消