2017-04-05 32 views
0

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

我运行:

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?

+0

没有转换将从您的输入中去除实际数据。 '\ r'在UTF-8中也是完全有效的。 – pozs

回答

0

您必须在单独的步骤中去除回车符。

如果您没有问题摆脱他们批发的,我建议是这样的:

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

是否有一个很好的理由,使用的数据类型varchar(或text,这是相同的),而不是xml

+0

谢谢!而已。没有理由使用varchar而不是xml,只需使用此代码。 –