2017-04-05 10 views
0

xml 파일에 바이너리 데이터가 포함 된 테이블이 있습니다. xml은 "\ 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'); 

그리고 리눅스 작동합니다. 그러나 Windows에서는 '\ 015'를 "\ r"(2 문자)로 변환합니다.

<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', 
       '' 
      ); 

아니라 xml 이상 (동일 또는 text) 데이터 형식 varchar를 사용하는 좋은 이유가 :

당신은 도매 그들을 제거하기로 확인하는 경우

, 내가 좋아하는 뭔가를 제안?

+0

고마워요! 그게 전부 야. xml 대신 varchar를 사용할 이유가 없으므로이 코드로 작업하면됩니다. –