我正在尝试使用复制命令将一些数据插入到我的表中:
copy otype_cstore from '/tmp/otype_fdw.csv' delimiter ';' quote '"' csv;
我有这个答案:
ERROR: unterminated CSV quoted field
我的 CSV 文件中有一行出现了问题:
533696;PoG;-251658240;from id GSW C";
这是唯一一行双引号,我无法删除它,所以你能给我一些建议吗?
提前谢谢您
如果您的 csv 中有这样的行:
533696;PoG;-251658240;from id GSW C";
这实际上意味着/显示字段没有被引用,只要字段内没有分隔符,这仍然是完全有效的 csv。
在这种情况下,应该告诉解析器这些字段没有被引用。
因此,不要使用
quote '"'
(这实际上是告诉解析器 被引用的字段以及为什么会出现错误),您应该使用类似 quote 'none'
的内容,或者将 quote 参数留出(我不这样做)了解 Postgres,所以我无法为您提供执行此操作的确切选项)。
好的,我对参数进行了快速查找。看起来确实没有关闭引用的选项。剩下的唯一选择是提供数据中从未使用过的引号字符。
quote E'\b'
(退格)似乎工作正常。
回复有点晚了,但我面临着同样的问题,发现对于双引号,我们需要再添加一个双引号来转义,以及该特殊字符的前缀和后缀双引号。 对于你的情况来说是
输入数据是:来自 id GSW C"
将数据更改为:来自 id GSW C""""
注意有 4 个连续的双引号。 根据文档,第一个和最后一个双引号是前缀和后缀。 中间 2 个双引号是带有一个转义双引号的数据。 希望这对以后遇到类似问题的读者有所帮助。
因此,对于数据中的每个双引号,都需要使用一个转义字符(默认双引号)进行转义。这是根据文档。
使用导入/导出数据选项导入 csv 文件, 选择您要导入的文件 转到选项,向下滚动到“Escape”,选择双引号而不是单引号“