将含JSONB的CSV导入PostgreSQL 14报错,求排查指导
问题原因与解决办法
核心问题
你遇到的错误源于两个关键参数设置错误:
- 错误的
escape参数:你将转义符设为了换行符E'\n',但你的CSV里是用双引号转义双引号(即""表示单个")。这个错误设置会让PostgreSQL无法正确识别JSONB字段的边界,把字段内部的内容当成额外的列,从而触发"extra data after last expected column"错误。 - 可能的表头参数错误:如果你的CSV文件里并没有表头行,命令里的
header参数会把第一行数据当成表头处理,同样会导致列数不匹配的错误。
修正后的导入命令
根据你的CSV实际情况选择:
情况1:CSV无表头行
移除header和错误的escape参数(PostgreSQL默认CSV转义符就是双引号,无需额外指定):
\copy task (id,details,status,time_started,time_completed) FROM '0000-2893fb23.parquet.csv' csv quote '"';
情况2:CSV有表头行
保留header,但移除错误的escape参数:
\copy task (id,details,status,time_started,time_completed) FROM '0000-2893fb23.parquet.csv' csv header quote '"';
验证导入结果
导入完成后,可以执行以下SQL验证JSONB字段是否正确解析:
SELECT id, details->>'t_id', details->>'m_id' FROM task;
内容的提问来源于stack exchange,提问作者JollyRoger
相关产品推荐
相关产品推荐

