PostgreSQL中ON CONFLICT语句能否直接使用唯一约束名指定冲突规则
结论
可以直接使用约束名指定冲突判断规则,这是PostgreSQL ON CONFLICT 子句原生支持的语法。
具体用法
你只需要把原语句中的冲突字段声明替换为ON CONSTRAINT 约束名的格式即可,对应你的场景正确写法如下:
INSERT INTO table1(user_id, product, val3) VALUES(1, 1, 'some_value') ON CONFLICT ON CONSTRAINT con1 DO UPDATE SET val3 = '';
注意:PostgreSQL 中字符串字面量需要用单引号包裹,双引号仅用于识别表名、字段名这类标识符,原语句中给
val3赋值用双引号的写法会执行报错。
补充说明
PostgreSQL的ON CONFLICT子句支持两种冲突匹配规则:
- 指定冲突列/索引表达式:数据库会自动匹配对应列上的唯一约束/唯一索引
- 直接指定约束名:精准匹配你创建的对应约束,无需重复写字段组合,适合约束包含多字段、或者你需要明确指定用某一个约束做冲突判断的场景
内容的提问来源于stack exchange,提问作者Rolaman
相关产品推荐
相关产品推荐

