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

TypeORM使用Postgres的unnest函数实现批量插入失败如何解决?

TypeORM 调用Postgres unnest批量插入的正确调整方案

原有代码无法正常执行的核心原因是:

  • 未给unnest返回的结果列显式指定别名,TypeORM无法将返回字段与目标实体的插入列做映射
  • 子查询的参数传递方式不符合QueryBuilder的绑定规则,导致参数未被正确识别

正确代码示例如下:

manager
  .createQueryBuilder()
  .insert()
  // 显式指定要插入的实体列,顺序和后续select的列顺序保持一致
  .into(Foo, ['a', 'b', 'c'])
  .values((qb) => 
    qb
      // 列别名可自定义,只要和后续unnest返回的列顺序、类型匹配即可
      .select(['col1', 'col2', 'col3'])
      // 给unnest的结果集加表别名,用占位符声明参数
      .from('UNNEST(:arr1::int[], :arr2::text[], :arr3::text[])', 'unnest_res')
      // 通过setParameter绑定数组参数
      .setParameter('arr1', data1)
      .setParameter('arr2', data2)
      .setParameter('arr3', data3)
  )
  .execute()

调整后生成的SQL符合预期:

INSERT INTO "foo"("a", "b", "c") 
SELECT "col1", "col2", "col3" 
FROM UNNEST($1::int[], $2::text[], $3::text[]) AS "unnest_res"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:18:00