Postgres 中未终止的 CSV 引用字段

问题描述 投票:0回答:3

我正在尝试使用复制命令将一些数据插入到我的表中:

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

我有这个答案:

ERROR:  unterminated CSV quoted field

我的 CSV 文件中有一行出现了问题:

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

这是唯一一行双引号,我无法删除它,所以你能给我一些建议吗?

提前谢谢您

postgresql csv copy
3个回答
21
投票

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

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

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

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

因此,不要使用

quote '"'
(这实际上是告诉解析器 被引用的字段以及为什么会出现错误),您应该使用类似
quote 'none'
的内容,或者将 quote 参数留出(我不这样做)了解 Postgres,所以我无法为您提供执行此操作的确切选项)。

好的,我对参数进行了快速查找。看起来确实没有关闭引用的选项。剩下的唯一选择是提供数据中从未使用过的引号字符。

quote E'\b'
(退格)似乎工作正常


1
投票

回复有点晚了,但我面临着同样的问题,发现对于双引号,我们需要再添加一个双引号来转义,以及该特殊字符的前缀和后缀双引号。 对于你的情况来说是

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

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

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

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


0
投票

使用导入/导出数据选项导入 csv 文件, 选择您要导入的文件 转到选项,向下滚动到“Escape”,选择双引号而不是单引号“

© www.soinside.com 2019 - 2024. All rights reserved.