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

PostgreSQL从CSV插入JSON数组时出现数组字面量格式错误问题

问题

尝试通过CSV向PostgreSQL表中插入JSON数组(表结构里该字段定义为json类型),用的INSERT语句是这样的:

INSERT INTO "MySchema".my_table (id, main_array) values(DEFAULT, '{{"KeyA": 10,"KeyB":20},{"KeyA": 100,"KeyB":200}}');

执行后直接报错:

ERROR: malformed array literal 
Detail: Unexpected array element.

注:这个INSERT语句是数据库自己生成的,但用Node.js的Sequelize代码处理同一个JSON数组时能正常运行。CSV文件结构如下:
mytable.csv

1,{{"KeyA": 10,"KeyB":20},{"KeyA": 100,"KeyB":200}}
解决方案
  • 问题出在格式识别:你写的双层大括号{{...}}会被PostgreSQL当成PostgreSQL原生数组的字面量,但你的字段类型是json,格式不匹配才报错。Sequelize能正常跑是因为它会自动把JSON数组转成PostgreSQL认的正确格式。

  • 改INSERT语句:把双层大括号换成单层大括号,要是PostgreSQL还是识别不了,就显式指定类型转换:

-- 常规写法:直接用标准JSON数组格式
INSERT INTO "MySchema".my_table (id, main_array) VALUES(DEFAULT, '[{"KeyA": 10,"KeyB":20},{"KeyA": 100,"KeyB":200}]');

-- 显式转类型(可选,用于自动识别失效的情况)
INSERT INTO "MySchema".my_table (id, main_array) VALUES(DEFAULT, '[{"KeyA": 10,"KeyB":20},{"KeyA": 100,"KeyB":200}]'::json);
  • 修正CSV文件:把CSV里的双层大括号改成单层大括号,保证内容是标准JSON数组:
    修正后的mytable.csv
1,[{"KeyA": 10,"KeyB":20},{"KeyA": 100,"KeyB":200}]
  • 额外提醒:如果是用COPY命令导CSV,得确保CSV里的JSON数组是标准格式,要是碰到特殊字符转义问题,可以配合FORMAT csv设置合适的转义符,或者提前处理好CSV内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:15:35