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

PostgreSQL使用COPY导入CSV时JSONB字段报错,如何解决?

修复PostgreSQL COPY导入JSONB字段的错误

问题根源

你的COPY命令指定了QUOTE '"'(双引号)和ESCAPE ''''(单引号),但CSV中JSON字段的双引号未按当前参数规则正确转义,导致JSON解析失败。

解决方案

方案1:按当前COPY参数规则转义JSON双引号

在CSV的name字段中,用双引号包裹整个JSON字符串,同时将JSON内部的双引号用你设置的ESCAPE字符(单引号)转义,最终格式为:

"{'"en_US"': '"Test record"'}"

导入时PostgreSQL会自动将'"'解析为",得到合法的JSON字符串{"en_US": "Test record"}。

方案2:调整COPY命令的ESCAPE参数为双引号(推荐)

将COPY命令的ESCAPE参数改为双引号(与QUOTE一致,也是CSV模式默认行为),修改后的命令:

COPY table_name(id, name, create_uid, create_date, write_uid, write_date)
FROM '/path/filename.csv'
DELIMITER ',' CSV HEADER ENCODING 'UTF8' QUOTE '"' ESCAPE '"';

此时CSV的name字段格式为:

"{""en_US"": ""Test record""}"

两个连续的双引号会被解析为单个双引号,最终生成合法的JSONB内容。

方案3:禁用CSV引号处理(仅适用于无特殊字符的字段)

如果你的其他字段不包含逗号或双引号,可以禁用QUOTE功能,修改COPY命令:

COPY table_name(id, name, create_uid, create_date, write_uid, write_date)
FROM '/path/filename.csv'
DELIMITER ',' CSV HEADER ENCODING 'UTF8' QUOTE '\0';

此时CSV的name字段直接写原始JSON即可,无需包裹或转义:

{"en_US": "Test record"}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:50:43