将CSV文件数据导入PostgreSQL时提示‘Failed (exit code 1)’的问题排查求助
嘿,我刚入门PostgreSQL的时候也踩过这个导入失败的坑!Exit code 1通常是导入过程中某个环节和数据库的要求不匹配,咱们逐个排查可能的原因:
表结构与CSV字段不匹配
这是最常见的问题!比如CSV里的字段数量和你创建的空表列数不一样,或者数据类型不兼容——比如CSV里某列是带小数点的字符串,但表中对应列设成了整数类型,或者日期格式和数据库要求的不一致(比如CSV用MM/DD/YYYY但数据库默认是YYYY-MM-DD)。建议仔细核对CSV的表头、字段数量和表的列名、数量、数据类型是否完全对应。分隔符设置错误
你指定了分隔符,但可能和CSV实际使用的不一致。比如很多欧洲地区的CSV会用分号;当分隔符,有的可能用制表符(Tab),但你选了逗号,。可以用记事本、VS Code这类文本编辑器打开CSV文件,看看实际的分隔符是什么,再调整导入设置里的选项。文件权限问题
PostgreSQL的服务进程可能没有读取你这个CSV文件的权限。如果是Windows系统,试试把CSV文件移到桌面、文档这类公共文件夹再导入;如果是Linux或macOS,可以给文件添加可读权限,执行命令:chmod +r 你的CSV文件名.csv。表头处理逻辑错误
如果你勾选了“表头”选项,但CSV的第一行其实不是表头,或者表头的列名和表的列名不匹配(PostgreSQL默认对列名大小写敏感,比如表列是user_id但CSV表头是User_ID,就会导致字段匹配失败)。可以先去掉表头选项试试,或者修改CSV表头和表列名完全一致。特殊字符或编码不兼容
CSV里可能包含未正确处理的特殊字符(比如单元格里的换行符、未闭合的引号),或者文件编码和数据库编码不一致(比如CSV是GBK编码,而数据库用的是UTF-8)。可以用文本编辑器把CSV转成UTF-8编码再尝试导入,同时检查CSV里的引号是否都正确闭合。约束冲突
你创建的空表可能设置了NOT NULL、唯一约束或其他规则,但CSV里对应字段有空值或者重复数据。可以先临时去掉表的约束,导入完成后再重新添加;或者先清理CSV里的无效数据。
内容的提问来源于stack exchange,提问作者Manasa

