我有CSV文件,以制表符分隔,字段不用引号括起来,其中字段数据可以包含单引号、双引号、管道和反斜杠等字符
示例数据可以如下所示:
12“ba$aR\r\18
我想使用COPY语句将此数据导入Postgres
当我尝试使用
将<;tablename>;从<;filename>;NULL复制为“”;
由于Postgres将反斜杠+制表符视为“转义制表符”,而不是后跟字段分隔符的反斜杠,因此我得到一个错误psql:-:1:error:缺少列的数据
因此,我转而使用复制操作符的“CSV格式”,如下所示:
从<;文件名>;复制<;tablename>;,并将CSV分隔符E'\t'NULL作为“”;
现在有一个新的错误psql:-:1:error:value太长,无法改变类型字符(254)
显然是因为它将字段3开头的双引号解释为字段包装字符
如何指定我的数据根本不被引用?
解决方法(感谢此评论!)
从<;文件名>;复制<;tablename>;,并使用CSV分隔符E'\t'QUOTE E'\b'NULL作为“”;
因此,基本上指定一个不应该出现在文本中的引号字符,但这很难看
我更希望有一种方法可以完全关闭报价处理