我有CSV文件,以制表符分隔,字段没有用引号括起来,其中字段数据可以包含单引号,双引号,管道和反斜杠等字符.
示例数据可能如下所示:
1 2 "ba$aR\eR\ 18
我想使用COPY语句将此数据导入Postgres.
当我尝试使用导入它时
COPYFROM NULL AS '';
我得到一个错误,psql:-:1: ERROR: missing data for column
因为Postgres将反斜杠+选项卡视为"转义选项卡"而不是反斜杠后跟字段分隔符.
所以我切换到使用COPY运算符的"CSV格式",如下所示:
COPYFROM WITH CSV DELIMITER E'\t' NULL AS '';
现在出现了一个新错误 psql:-:1: ERROR: value too long for type character varying(254)
显然是因为它将字段3开头的双引号解释为字段包装字符.
如何指定我的数据根本没有引用?
解决方法(感谢此评论!)
COPY <tablename> FROM <filename> WITH CSV DELIMITER E'\t' QUOTE E'\b' NULL AS '';
所以基本上指定一个永远不应该出现在文本中的引号字符,但这非常难看.
如果实际上有一种方法可以完全关闭报价处理,我会更喜欢它.