我有一个csv文件,我正试图导入我的PostgreSQL数据库(第10版)。我使用以下基本SQL语法:
COPY table (col_1, col_2, col_3)
FROM '/filename.csv'
DELIMITER ',' CSV HEADER
QUOTE '"'
ESCAPE '\';
导入前30,000行左右没有任何问题。但后来我开始遇到破坏导入的csv文件中的格式问题:
我得到的典型错误是
ERROR: extra data after last expected column
所以我开始使用Vim手动编辑csv文件(csv文件有近700万行,所以真的不能想到另一个桌面工具使用)
非常感谢!
答案 0 :(得分:1)
请注意,该文件不符合the CSV specification:
- 如果使用双引号括起字段,则使用双引号 出现在一个字段内必须通过前面的方式进行转义 另一个双引号。
醇>
您应指定双引号以外的引号,例如' |':
create table test(a text, b text, c text);
copy test from '/data/example.csv' (format csv, quote '|');
select * from test;
a | b | c
-----------+-------------+-----------
"value_1" | ""value_2"" | "value_3"
"value_1" | "val"ue_2" | "value_3"
(2 rows)
您可以使用trim()
或replace()
函数删除不需要的双引号,例如:
update test
set a = trim(a, '"'), b = trim(b, '"'), c = trim(c, '"');
select * from test;
a | b | c
---------+----------+---------
value_1 | value_2 | value_3
value_1 | val"ue_2 | value_3
(2 rows)