You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL的ON CONFLICT子句中使用IF ELSE实现条件更新

实现方案

PostgreSQL的INSERT ON CONFLICT语法原生支持在UPDATE分支添加过滤条件,你需要的逻辑可以通过如下写法实现:

INSERT INTO 你的表名 (data, updated_mode, [其他需要插入的字段])
VALUES ('待插入的数据', 'automatic'::updated_mode, [其他对应字段值])
ON CONFLICT (冲突字段列表)
DO UPDATE SET
  data = excluded.data
  -- 其他需要更新的字段可以继续往下加
WHERE 你的表名.updated_mode = 'automatic';

注意事项

  • WHERE子句是对冲突发生时数据库中已存在的旧行进行判断,只有旧行的updated_mode值为automatic时才会执行更新操作,不满足条件的冲突行不会被修改,完全符合你预期的逻辑。
  • 如果是批量插入场景,该语法也完全适用,每一行冲突都会单独判断过滤条件,不需要额外调整写法。
  • 若updated_mode是枚举类型,建议在值后面加上对应枚举类型的强转,避免出现类型不匹配的报错,比如写成'automatic'::枚举类型名。

内容的提问来源于stack exchange,提问作者Ritik Harchani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:12:01