zer*_*kms 3 csv postgresql postgresql-8.4
我使用的是postgres 8.4,目前正在尝试导入一个简单的CSV:
这是一张桌子:
CREATE TABLE public.sample (
a VARCHAR,
b VARCHAR
) WITHOUT OIDS;
Run Code Online (Sandbox Code Playgroud)
这是一个csv文件示例:
"foo","bar, baz"
Run Code Online (Sandbox Code Playgroud)
查询
COPY sample FROM '/tmp/sample.csv' USING DELIMITERS ',';
Run Code Online (Sandbox Code Playgroud)
预期的投掷
ERROR: extra data after last expected column
CONTEXT: COPY sample, line 1: ""foo","bar, baz""
Run Code Online (Sandbox Code Playgroud)
但是,嗯,CSV解析不是一门科学,我想知道如果不重新格式化源csv是否无法解决。
有任何想法吗?
PS:csv来自第三方,我无法更改格式。
PPS:是的,我知道可以在导入之前对其进行预处理(手动更改定界符)
最终解决方案:
COPY sample FROM '/tmp/sample.csv' WITH DELIMITER ',' CSV;
Run Code Online (Sandbox Code Playgroud)
最初取自/sf/answers/677752211/,文档页面为http://www.postgresql.org/docs/8.4/static/sql-copy.html
显然,当您尝试将其导入为文本格式时,您拥有一个CSV文件。使用:
COPY sample FROM '/tmp/sample.csv' FORMAT CSV;
Run Code Online (Sandbox Code Playgroud)
CSV格式的默认分隔符仍然是逗号(,)。更多的手册。语法适用于当前版本9.1。对于PostgreSQL 8.4:
COPY sample FROM '/tmp/sample.csv' CSV;
Run Code Online (Sandbox Code Playgroud)