我正在尝试将一个普通的 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;
最初取自https://stackoverflow.com/a/9682174/251311 ,文档页面为 http://www.postgresql.org/docs/8.4/static/sql-copy.html
最佳答案
显然,当您尝试将其导入为文本格式时,您有一个 CSV 文件。对于 Postgres 9.1 或更新版本,使用:
COPY sample FROM '/tmp/sample.csv' (FORMAT csv);
无论如何,CSV 格式的默认分隔符是逗号 (,
)。 More in the manual .
对于 PostgreSQL 8.4 或更早版本:
COPY sample FROM '/tmp/sample.csv' CSV;
关于postgresql - 在字符串值中导入带逗号的 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10001651/