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

slick-pg是否支持带RETURNING子句的批量Upsert功能?

slick-pg批量Upsert带RETURNING失败:功能未支持,非Bug

这不是Bug,是slick-pg目前不支持带RETURNING的批量Upsert功能。

原因说明

slick-pg的insertOrUpdateAll方法在结合returning使用时,底层SQL生成逻辑没有实现多行返回结果的构建逻辑。虽然PostgreSQL本身的批量Upsert(ON CONFLICT DO UPDATE)语法支持RETURNING子句,但slick-pg的InsertBuilderResult组件并未适配这种场景的多行处理,因此在SQL生成阶段就会抛出你看到的Building multi-row inserts from this InsertBuilderResult is not supported错误。

验证对比

  • 不带RETURNING的批量Upsert正常:因为不需要处理返回结果的多行构建逻辑,仅执行Upsert操作即可;
  • 带RETURNING的普通批量插入正常:普通多行插入的RETURNING逻辑是Slick核心库已经实现的功能,和Upsert的扩展逻辑不冲突。

替代方案

如果需要获取批量Upsert后的记录数据,有两种可行方式:

  1. 先执行不带RETURNING的insertOrUpdateAll,再通过主键查询对应的记录;
  2. 对每条记录单独执行带RETURNING的单条Upsert(性能略低,但能直接获取返回结果)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 12:17:26