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

Node.js使用pg-format批量插入PostgreSQL数据格式异常排查

问题原因

你用pg-format的%L直接处理整个二维数组rows时,%L会将数组完全扁平化,把所有元素拆成逗号分隔的带引号值,不会自动为每个子数组添加(...)分组,导致VALUES结构混乱,字段对应关系错误。

解决方案

需要为每个子数组单独生成(值1, 值2, ...)的结构,再拼接成批量插入的VALUES部分。具体代码如下:

const table_name = 'testtable';
const rows = [[200,"http://localhost:3000/product",null,[{url:"www.someurl.com", name: "Test"},{url:"www.someurl1.com", name: "Test1"}]],[400,"http://localhost:3000/user",null,[{url:"www.someurl3.com", name: "1Test"},{url:"www.someurl2.com", name: "1Test1"}]]];
const columns = ['code', 'url', 'additional', 'response'];

// 处理每个行,生成带括号的格式化值
const formattedValues = rows.map(row => {
  // 对每个字段值进行格式化,数组/对象类型转JSON字符串后再处理
  const formattedFields = row.map(val => {
    if ((Array.isArray(val) || typeof val === 'object') && val !== null) {
      return format('%L', JSON.stringify(val));
    }
    return format('%L', val);
  });
  return `(${formattedFields.join(', ')})`;
}).join(', ');

const query1 = format(`INSERT INTO ${table_name} (${columns.join(', ')}) VALUES ${formattedValues} returning id`);
正确生成的SQL示例
INSERT INTO testtable (code, url, additional, response) VALUES ('200','http://localhost:3000/product',NULL,'[{"url":"www.someurl.com","name":"Test"},{"url":"www.someurl1.com","name":"Test1"}]'), ('400','http://localhost:3000/user',NULL,'[{"url":"www.someurl3.com","name":"1Test"},{"url":"www.someurl2.com","name":"1Test1"}]') returning id

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:35:27