我有这样的 csv 行:
"aaa"|"bbb"|"ccc"|"dddd
eeeee"
我想使用 pgloader ( http://pgloader.io/ ) 或 PostgreSQL COPY ( https://www.postgresql.org/docs/9.6/static/sql-copy.html ) 导入这些数据。我的问题是,根据 CSV 标准,在引用的字段值内可能有换行符 (\n)。但是 pgloader 和 COPY 命令将其视为全新的数据行,而不是其中包含换行符的一列。
COPY schema.table (
col_aaa,
col_bbb,
col_ccc,
col_ddd
)
FROM 'file.csv' WITH DELIMITER '|' ENCODING 'LATIN1' CSV;
我的 COPY 命令 我的 pgloader 命令
LOAD CSV
FROM 'file.csv'
INTO postgresql://user:password@host:5432/database?schema.table (col_aaa, col_bbb, col_ccc, col_ddd)
WITH
skip header = 0,
fields optionally enclosed by '"',
fields escaped by double-quote,
fields terminated by '|'
SET client_encoding to 'latin1'
BEFORE LOAD DO
$$ TRUNCATE anac.aerodromos_csv RESTART IDENTITY; $$;
我从 PostgreSQL 文档和谷歌搜索了很多。
我发现的唯一一件事是:Parsing CSV file with \n in double quotes fields but awk is too slow for a file with more than 100万行。
关于如何做的任何提示?
我的首选是 pgloader,但我可以接受使用 sed 或 perl 作为正则表达式代理来处理 linux shell 脚本中的文件。
关于如何做的任何线索?