我使用COPY FROM
將數據從文件導入PostgreSQL數據庫表。 我的文件中的一些字符串包含十六進制字符(主要是\ x0d和\ x0a),我希望使用COPY
將它們轉換爲常規文本。
我的問題是他們被視爲常規文本並保持字符串不變。
如何獲得轉換的十六進制值?如何在使用Postgres COPY FROM時轉換十六進制字符?
這裏是我的情況一個簡單的例子:
-- 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'
最後一段中問題的答案:https://www.postgresql.org/docs/current/static/sql-copy.html部分文件格式:「反斜槓不是CSV格式的特殊字符」 – azalea