【问题标题】:Upsert if on conflict occurs on multiple columns in Postgres db如果在 Postgres db 中的多个列上发生冲突,则更新
【发布时间】:2018-08-01 14:22:46
【问题描述】:

我在 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 列上使用,所以回到同一个问题。

【问题讨论】:

    标签: postgresql insert sql-update upsert


    【解决方案1】:

    实际上,在这里找到它,但不是在标记为答案的帖子中,而是在评分最高的帖子中。 Use multiple conflict_target in ON CONFLICT clause

    所以我们的查询如下:

    INSERT into table (col1, col2, col3)
    VALUES ('1', 'A', 'colval1A')
    ON CONFLICT (col1, col2) DO UPDATE 
    SET col3 = 'good_value'
    

    【讨论】:

      猜你喜欢
      • 2019-09-19
      • 2016-04-03
      • 2016-05-04
      • 2012-09-01
      • 1970-01-01
      • 2019-02-22
      • 2017-04-03
      • 2017-08-01
      • 2021-08-22
      相关资源
      最近更新 更多