CREATE TABLE cast_info (
id integer NOT NULL PRIMARY KEY,
person_id integer NOT NULL,
movie_id integer NOT NULL,
person_role_id integer,
note character varying,
nr_order integer,
role_id integer NOT NULL
);
然后我想复制CSV文件:
COPY cast_info FROM '/private/tmp/cast_info.csv' WITH CSV HEADER;
**ERROR: extra data after last expected column
CONTEXT: COPY cast_info, line 8801: "612,207,2222077,1,"(segments \"Homies\" - \"Tilt A Whirl\" - \"We don't die\" - \"Halls of Illusions..."**
此CSV文件中的完整行如下:
612,207,2222077,1,"(segments \"Homies\" - \"Tilt A Whirl\" - \"We don't die\" - \"Halls of Illusions\" - \"Chicken Huntin\" - \"Another love song\" - \"How many times?\" - \"Bowling balls\" - \"The people\" - \"Piggy pie\" - \"Hokus pokus\" - \"Let\"s go all the way\" - \"Real underground baby\")/Full Clip (segments \"Duk da fuk down\" - \"Real underground baby\")/Guy Gorfey (segment \"Raw deal\")/Sugar Bear (segment \"Real underground baby\")",2,1
您可以看到表格完全有7列。奇怪的是,我发现所有这些文件的误差行都包含字符backslash和Quotation Mark(\“)。此外,这些行不是文件中唯一包含\的行。我想知道为什么此错误不会在其他行中出现。因此,我不确定这是否是问题。
修改这些行后(例如,替换\“或在剩下逗号时删除内容),有新的错误:
eRROR:无效的每个文件第2行的输入语法。这些行的列已无缘无故地添加了三个分号(;;)。例如,在此行的第五列中删除内容后:
612,207,2222077,1,,2,1
**ERROR: invalid input syntax for type integer: "1;;;"
CONTEXT: COPY cast_info, line 2, column role_id: "1;;;"**
行2不包含三个分号,如下:
2,2,2163857,1,,25,1
原则上,我希望可以解决问题本身而没有任何修改的问题。谢谢您的耐心和帮助!
CSV格式通过加倍而不是通过反击来保护报价标记。 您可以使用文本格式,但不支持标头的格式,然后它也不会删除外部报价标记。 相反,您可以使用程序即时调整文件:
COPY cast_info FROM PROGRAM 'sed s/\\\\/\"/g /private/tmp/cast_info.csv' WITH CSV;
这与您给出的一个例子一起使用,但可能对所有情况都不起作用。 Error:每个文件的第2行的无效输入语法。和错误 之所以发生,是因为这些行的最后一列中的数据已经 无缘无故地添加了三个分号(;;)。但是当我打开这些CSV时 文件,我看不到这些行中的三个半殖民地
您如何编辑和查看这些文件? 听起来您正在使用不太擅长保存格式的东西,例如Excel。
trory实际上在复制语句中命名要处理的列:
根据朋友的建议,我需要将后斜切指定为逃生角色:
copy <table_name> from '<csv_file_path>' csv escape '\';
然后解决了问题。
也许这与您无关,但是如果它可能对某人有所帮助,则此错误也会出现,如果您不指定正确的表并定位错误的表格。
RROR: extra data after last expected column
Kr,