小编qed*_*ed-的帖子

使用多个唯一约束进行Postgres冲突处理

我想使用insert .. on confict do update ..语法与一个对两列有唯一约束的表.这可能吗?

例如,mytable对col1和col2有独立的唯一约束.

我可以写:

INSERT INTO mytable(col1, col2, col3) values ('A', 'B', 0) ON CONFLICT DO NOTHING;
Run Code Online (Sandbox Code Playgroud)

但是这不起作用:

INSERT INTO mytable(col1, col2, col3) VALUES ('A', 'B', 0) 
ON CONFLICT 
DO UPDATE SET col3 = EXCLUDED.col3 + 1;
Run Code Online (Sandbox Code Playgroud)

错误:ON CONFLICT DO UPDATE需要推理规范或约束名称

这也行不通:

INSERT INTO mytable(col1, col2, col3) VALUES ('A', 'B', 0)
ON CONFLICT (col1, col2) 
DO UPDATE SET col3 = EXCLUDED.col3 + 1;
Run Code Online (Sandbox Code Playgroud)

错误:没有与ON CONFLICT规范匹配的唯一或排除约束

此语法似乎是针对两列而不是两个约束的单个复合唯一约束而设计的.

如果违反任何唯一约束,有没有办法进行条件更新?这个问题如何在Postgres中关于2列中的一列冲突?暗示但不提供语法.

postgresql

35
推荐指数
2
解决办法
2万
查看次数

标签 统计

postgresql ×1