导入Kaggle数据集至PostgreSQL时遇「最后列后有额外数据」错误求助
解决PostgreSQL导入CSV时「extra data after the contents of the last column」错误
问题根源
从错误日志的行内容"Wii Sports,Wii,2006,Sports,Nintendo,41.36,28.96,3.77,8.45,82.53,76,51,8,322,Nintendo,E,"可以明确:每行最后一个字段末尾多了一个逗号,导致PostgreSQL解析时认为存在第17列,但你的games表仅定义了16列,因此触发列数不匹配错误。
解决方案
方法1:批量清理CSV文件末尾逗号
用文本编辑器或脚本工具移除所有行末尾的多余逗号:
- Notepad++操作:打开CSV文件,按
Ctrl+H打开替换窗口,选择「正则表达式」模式,查找框输入,$,替换框留空,点击「全部替换」。 - Windows PowerShell脚本:
(Get-Content "E:\CSV\games.csv") | ForEach-Object { $_ -replace ',$', '' } | Set-Content "E:\CSV\games_cleaned.csv"
处理完成后,用清理后的games_cleaned.csv执行导入命令。
方法2:修改COPY命令兼容末尾逗号
如果不想修改源文件,可以在COPY命令中添加TRUNCATECOLUMNS参数(PostgreSQL 12+支持),该参数会自动截断超出表列数的多余字段:
COPY games(Name, Platform, Year_of_Release, Genre, Publisher, NA_Sales, EU_Sales, JP_Sales, Other_Sales, Global_Sales, Critic_Score, Critic_Count, User_Score, User_Count, Developer, Rating) FROM 'E:\CSV\games.csv' DELIMITER ',' CSV HEADER TRUNCATECOLUMNS;
验证导入
执行上述任一方法后,重新运行COPY命令即可完成数据导入。若仍有问题,可检查:
- CSV文件的列数是否与表结构完全对应(可通过Excel打开查看列数)
- Postgres服务是否有权限访问指定路径下的CSV文件
内容的提问来源于stack exchange,提问作者Ruslan Gusev
相关产品推荐
相关产品推荐

