2017-04-05 9 views
0

私はバイナリデータとしてxmlファイルを含むテーブルを持っています。 xmlには、 "¥r¥n"文字が "¥015¥012"としてbyteaに含まれています。列の型を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」(2文字)に変換します。だから私は、結果にそのような何かを持っている:

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

はたぶんUTFにバイナリデータを変換するための適切な方法はありますか?

+0

変換しないと、実際のデータが入力から削除されます。 '\ r'はUTF-8でも完全に有効です。 – pozs

答えて

0

キャリッジリターンを別の手順で削除する必要があります。

あなたは卸売、それらを取り除くと、OKであれば、私のようなものをお勧め:

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

ではなくxmlより(同じかtext、)データ型varcharを使用するための良い理由がありますか?

+0

ありがとう!それでおしまい。 xmlの代わりにvarcharを使用する理由はありません。このコードを使用するだけです。 –