我正在使用COPY FROM
. 我的文件中的一些字符串包含十六进制字符(主要是 \x0d 和 \ x0a),我希望使用COPY
.
我的问题是它们被视为常规文本并在字符串中保持不变。
如何转换十六进制值?
这是我的情况的简化示例:
-- The table I am importing to
CREATE TABLE my_pg_table (
id serial NOT NULL,
value text
);
COPY my_pg_table(id, data)
FROM 'location/data.file'
WITH CSV
DELIMITER ' ' -- this is actually a tab
QUOTE ''''
ENCODING 'UTF-8'
示例文件:
1 'some data'
2 'some more data \x0d'
3 'even more data \x0d\x0a'
注意:文件是制表符分隔的。
现在,做:
SELECT * FROM my_pg_table
会给我包含十六进制的结果。
上下文的附加信息:
我的任务是从 sybase 表(数百个)中导出数据并导入 Postgres。我正在使用UNLOAD
将数据导出到文件,如下所示:
UNLOAD
TABLE my_sybase_table
TO 'location/data.file'
DELIMITED BY ' ' -- this is actually a tab
BYTE ORDER MARK OFF
ENCODING 'UTF-8'