7

我正在尝试将一个简单的 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 文件是否无法解决。

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

最终解决方案

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

4

1 回答 1

8

显然,当您尝试将其导入为文本格式时,您有一个 CSV 文件。对于 Postgres 9.1 或更高版本,请使用:

COPY sample FROM '/tmp/sample.csv' (FORMAT csv);

,无论如何,CSV 格式的默认分隔符是逗号 ( )。更多在手册中
对于 PostgreSQL 8.4 或更早版本:

COPY sample FROM '/tmp/sample.csv' CSV;
于 2012-04-03T21:41:04.177 回答