如果在Postgres db中的多个列上发生冲突,则进行Upsert

时间:2018-02-21 21:07:18

标签: postgresql insert sql-update upsert

我在Postgres数据库中有一个没有主键的表。如果2列的组合具有相同的值,我想更新。

...
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 个答案:

答案 0 :(得分:0)

实际上,在这里找到它但不是在标记为答案的帖子中,而是评分最高的帖子。 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'