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

PostgreSQL INSERT INTO ON CONFLICT转H2 MERGE语法咨询

将PostgreSQL Upsert转换为H2兼容的MERGE语句

转换逻辑

PostgreSQL的INSERT ... ON CONFLICT语法对应H2的MERGE语法,核心是通过USING子句提供待插入的数据,再通过ON子句指定冲突判定字段(此处为id),分别处理匹配(更新)和不匹配(插入)的场景。

对应H2查询语句

注:原PostgreSQL语句中ON CONFLICT后的SET子句存在笔误(重复写了field3,合理逻辑应为更新field3和field4),以下按正确逻辑编写转换后的语句:

MERGE INTO dest_table
USING (VALUES (?, ?, ?, ?, ?)) AS t(id, field1, field2, field3, field4)
ON dest_table.id = t.id
WHEN MATCHED THEN
  UPDATE SET field3 = t.field3, field4 = t.field4
WHEN NOT MATCHED THEN
  INSERT (id, field1, field2, field3, field4)
  VALUES (t.id, t.field1, t.field2, t.field3, t.field4);

关键说明

  • USING子句:把传入的参数包装为临时表t,明确字段映射关系
  • ON子句:指定冲突判断规则(id相等即判定为冲突)
  • WHEN MATCHED:冲突触发时执行更新,用临时表t的数值覆盖目标表对应字段
  • WHEN NOT MATCHED:无冲突时执行插入,直接将临时表数据写入目标表

若需严格对应原PostgreSQL语句的笔误(重复更新field3),则UPDATE子句改为:

UPDATE SET field3 = t.field3, field3 = t.field4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:39:19