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

如何将Typescript对象数组直接插入Postgres表无需遍历处理

解决方案

你的需求完全可以通过PostgreSQL原生的json_to_recordset函数实现,不需要对Typescript数组做任何遍历或修改,仅通过单条SQL语句即可完成全量数据插入。

具体实现逻辑

你只需要把整个shipments数组序列化为JSON字符串,作为查询参数传入原生SQL即可,PostgreSQL会自动完成JSON结构到表记录的转换,不需要在TS层做任何数据处理。

代码示例

SQL语句模板

INSERT INTO 你的表名 (id, name, age, orderNumber)
SELECT * FROM json_to_recordset($1) AS t(
    id INT, 
    name VARCHAR, 
    age INT, 
    orderNumber VARCHAR
);

注意:AS t后面括号里的列类型,要和你实际表结构的列类型保持完全一致,这也是多数人使用json_to_recordset报错的核心原因。

AdonisJS中调用示例

await Database.connection(tenant).raw(
  `
  INSERT INTO ?? (id, name, age, orderNumber)
  SELECT * FROM json_to_recordset(?) AS t(
      id INT, 
      name VARCHAR, 
      age INT, 
      orderNumber VARCHAR
  )
  `,
  [table, JSON.stringify(shipments)]
)

方案说明

  • 整个过程不需要对shipments数组做任何遍历、重组操作,仅做一次JSON序列化即可,性能损耗可以忽略
  • 单条SQL执行,没有Adonis multiInsert的1000条上限限制
  • 字段映射关系可以灵活调整,如果你后续表字段有变化,只需要修改SQL里的列定义部分即可,不需要修改TS层的数组结构

常见问题排查

如果你之前使用json_to_recordset失败,90%以上的情况是如下两种原因:

  1. AS t(...)里声明的列名、列类型和实际表结构不匹配,比如列名大小写不一致、数值类型和字符串类型混用
  2. 传入的JSON字符串格式错误,确保你传入的是序列化后的标准JSON格式,没有TS特有的语法残留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:24:08