Postgresql 导入字符串值中带有逗号的CSV

Postgresql 导入字符串值中带有逗号的CSV,postgresql,csv,postgresql-8.4,postgresql-copy,Postgresql,Csv,Postgresql 8.4,Postgresql Copy,我正在尝试将一个简单的CSV导入Postgres 8.4数据库: 这是一张桌子: 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

我正在尝试将一个简单的CSV导入Postgres 8.4数据库:

这是一张桌子:

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文件,是否就不可能解决这个问题

输入来自第三方,我无法更改格式。
(我知道我可以在导入分隔符之前对其进行预处理以更改分隔符。)

最终解决方案

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

最初取自,文档页面是

很明显,当您尝试以文本格式导入CSV文件时,您有一个CSV文件。对于Postgres 9.1或更新版本,请使用:

COPY sample FROM '/tmp/sample.csv' (FORMAT csv);
CSV格式的默认分隔符是逗号(

对于PostgreSQL 8.4或更高版本:

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

对于8.4,语法略有不同,尽管@zerkms:Right,语法适用于当前版本9.1。我为文档添加了8.4变体。对于现在使用10.x版的用户,只需简单的评论一下-现在的语法更像是从“/tmp/sample.csv”复制样本,格式为(csv,DELIMITER',,NULL)”