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