如果 Postgres 数据库中的多个列发生冲突,则更新插入
Upsert if on conflict occurs on multiple columns in Postgres db
我在 Postgres 数据库中有一个没有主键的 table。如果 2 列的组合具有相同的值,我想更新。
...
ON CONFLICT (col1, col2)
DO UPDATE
ELSE
INSERT
...
没有主键我找不到任何东西。此外,col1 和 col2 的组合是唯一的。 col1 可能有多个具有相同值或 col2 的行,但不能在一起。
所以我的 table 是这样的:
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 列上使用所以回到同一个问题。
实际上,是在这里找到的,而不是在标记为答案的 post 中找到的,而是在评分最高的 post 中找到的。
所以我们的查询如下:
INSERT into table (col1, col2, col3)
VALUES ('1', 'A', 'colval1A')
ON CONFLICT (col1, col2) DO UPDATE
SET col3 = 'good_value'
我在 Postgres 数据库中有一个没有主键的 table。如果 2 列的组合具有相同的值,我想更新。
...
ON CONFLICT (col1, col2)
DO UPDATE
ELSE
INSERT
...
没有主键我找不到任何东西。此外,col1 和 col2 的组合是唯一的。 col1 可能有多个具有相同值或 col2 的行,但不能在一起。
所以我的 table 是这样的:
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 列上使用所以回到同一个问题。
实际上,是在这里找到的,而不是在标记为答案的 post 中找到的,而是在评分最高的 post 中找到的。
所以我们的查询如下:
INSERT into table (col1, col2, col3)
VALUES ('1', 'A', 'colval1A')
ON CONFLICT (col1, col2) DO UPDATE
SET col3 = 'good_value'