以字符串值导入CSV和逗号

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

Erw*_*ter 5

显然,当您尝试将其导入为文本格式时,您拥有一个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)