【发布时间】:2016-11-11 07:52:11
【问题描述】:
设置:Postgresql 服务器 9.3 - 操作系统:CentOS 6.6
尝试使用 COPY 命令将 2.5 亿条记录批量插入 Postgresql 9.3 服务器。数据采用管道“|”分隔格式作为分隔符。
我要复制到的表中几乎所有列都是 TEXT 数据类型。不幸的是,在 2.5 亿条记录中,大约有 200 万条具有合法的文本值,文本中带有“\0”。
示例条目:
245150963|数据源|736778|XYZNR-1B5.1|10-DEC-1984 00:00:00|||XYZNR-1B5.1\1984-12-10\0.5\1\ASDF1|pH|物理|水|XYZNR|河口
如您所见,第 8 列的值中有一个合法的 \0。
XYZNR-1B5.1\1984-12-10\0.5\1\ASDF1
无论我如何转义,COPY 命令要么将此 \0 转换为实际的 "\x0",要么 COPY 命令失败并显示 "ERROR: invalid byte sequence for encoding "UTF8": 0x00"。
我尝试将 \0 替换为“sed -i”:
\\0
\\\0
'\0'
\'\'0
\\\\\0
...还有很多其他我不记得了,但它们都不起作用。
这些类型的字符串的正确转义是什么?
谢谢!
【问题讨论】:
-
您是否尝试在 COPY TO 上提供 WITH NULL 参数?
-
我也有同样的问题,你找到解决办法了吗?
标签: postgresql text escaping psql backslash