2017-04-05 2 views
0

J'ai une table qui contient le fichier XML en tant que données binaires. Les xml contiennent des caractères "\ r \ n" comme "\ 015 \ 012" dans bytea. Je dois changer le type de colonne de bytea à varchar.Postgres: Après la conversion de bytea en varchar 'reste'

Je cours:

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

Et ça marche pour linux. Mais sur Windows, il convertit '\ 015' en "\ r" (deux caractères). J'ai donc quelque chose comme ça dans le résultat:

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

Peut-être il y a une bonne méthode pour convertir les données binaires en UTF?

+0

Aucune conversion ne supprimera les données réelles de votre entrée. '\ r' est parfaitement valide en UTF-8 aussi. – pozs

Répondre

0

Vous devrez supprimer les retours chariot dans une étape distincte.

Si vous êtes ok à se débarrasser d'eux en gros, je suggère quelque chose comme:

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

est-il une bonne raison d'utiliser le type de données varchar (ou text, qui est le même) plutôt que xml?

+0

Merci! C'est tout. Il n'y a aucune raison d'utiliser varchar au lieu de xml, il suffit de travailler avec ce code. –