Postgres中未终止的CSV引用字段

时间:2017-05-22 08:38:19

标签: postgresql csv copy

我试图使用copy命令将一些数据插入到我的表中:

copy otype_cstore from '/tmp/otype_fdw.csv' delimiter ';' quote '"' csv;

我有这个答案:

ERROR: unterminated CSV quoted field

我的CSV文件中有一行我遇到了问题:

533696;PoG;-251658240;from id GSW C";

这是双引号的唯一一行而且我无法将其删除,所以你对我有什么建议吗?

提前谢谢

2 个答案:

答案 0 :(得分:7)

如果你的csv中有这样的行:

533696;PoG;-251658240;from id GSW C";

这实际上意味着/显示字段没有引用,只要字段中没有分隔符,这仍然是完全有效的csv。

在这种情况下,应该告诉解析器没有引用字段。

因此,您应该使用quote '"'之类的内容,而不是使用quote 'none'(实际上是在告诉解析器 引用的字段以及为什么会出现错误),或者保留引用参数(我不知道Postgres,所以我无法给你确切的选项来执行此操作)。

好的,我做了quick lookup个参数。看起来似乎没有选择引用报价。剩下的唯一选择是提供从未在数据中使用的引号字符。

quote E'\b'(退格)seems to work ok

答案 1 :(得分:1)

回复有点晚,但我遇到了同样的问题,发现对于双引号,我们需要再添加一个双引号以与该特殊字符的前缀和后缀双引号一起转义。对于您的情况,它将是

输入数据是:来自 id GSW C"

将数据更改为:来自 ID GSW C""""

注意有 4 个连续的双引号。 根据文档,第一个和最后一个双引号是前缀和后缀。 中间 2 个双引号是带有一个转义双引号的数据。 希望这对今后遇到类似问题的读者有所帮助。

因此,对于数据中的每个双引号,都需要使用一个转义字符(默认双引号)进行转义。这是根据文档。