在字符串值中导入CSV和逗号

时间:2012-04-03 21:26:52

标签: postgresql csv postgresql-8.4

我使用postgres 8.4并且目前正在尝试导入一个简单的CSV:

这是一张表:

CREATE TABLE public.sample (
  a VARCHAR, 
  b VARCHAR
) WITHOUT OIDS;

这是一个csv文件样本:

"foo","bar, baz"

查询

COPY sample FROM '/tmp/sample.csv' USING DELIMITERS ',';

预期投掷

ERROR:  extra data after last expected column
CONTEXT:  COPY sample, line 1: ""foo","bar, baz""

但是,好吧,CSV解析不是火箭科学,我想知道如果不重新格式化源csv就不可能解决。

有什么想法吗?

PS:csv来自第三方,我无法改变格式。

PPS:是的,我知道我可以在导入之前对其进行预处理(手动更改分隔符)

最终解决方案

COPY sample FROM '/tmp/sample.csv' WITH DELIMITER ',' CSV;

最初取自https://stackoverflow.com/a/9682174/251311,文档页面为http://www.postgresql.org/docs/8.4/static/sql-copy.html

1 个答案:

答案 0 :(得分:5)

当您尝试将其作为文本格式导入时,显然您有一个CSV文件。使用:

COPY sample FROM '/tmp/sample.csv' FORMAT CSV;

无论如何,CSV格式的默认分隔符是逗号(,)。 More in the manual。语法适用于当前版本9.1。对于PostgreSQL 8.4:

COPY sample FROM '/tmp/sample.csv' CSV;