Postgres:从bytea转换为varchar'\ r'后仍然存在

时间:2017-04-05 07:53:08

标签: windows postgresql utf-8 varchar bytea

我有一个包含xml文件作为二进制数据的表。 xmls在bytea中包含“\ r \ n”字符为“\ 015 \ 012”。我需要将列类型从bytea更改为varchar。

我跑:

ALTER TABLE my_table ALTER COLUMN xml_data TYPE VARCHAR;
UPDATE my_table SET xml_data = convert_from(xml_data::bytea, 'UTF8');

它适用于Linux。但在Windows上,它将'\ 015'转换为“\ r”(两个字符)。所以我在结果中有类似的东西:

<field>...</field>\r
<field>...</field>

也许有一种将二进制数据转换为UTF的正确方法?

1 个答案:

答案 0 :(得分:0)

您必须在单独的步骤中剥离回车。

如果你可以批发它们,我建议像:

ALTER TABLE my_table
   ALTER xml_data TYPE text
      USING replace(
               convert_from(xml_data, 'UTF8'),
               E'\r',
               ''
            );

是否有充分的理由使用数据类型varchar(或text,而不是xml