database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 8795 게시물 읽기
No. 8795
COPY 질문입니다.
작성자
이성필(splee75)
작성일
2011-03-21 23:22
조회수
8,679

안녕하세요. 오랜 세월 눈팅하다 너무너무 궁금한 점이 있어서 질문을 올리게 되었습니다.

 

현재 환경은 CentOS5.5 / PostgreSQL 9.0.1 입니다.

 

XML 파일을 읽어서 테이블에 입력하는 작업을 하고 싶습니다.

파일의 갯수가 많고, 하나의 xml 파일에 하나의 record 입니다.

그래서 \copy 명령어로 xml 데이터 타입의 컬럼에 입력하고자 합니다.

xml 파일은 사람이 볼 때 편하도록 tab, CRLF 등의 문자가 있습니다.

 

웹에서 검색해 본 결과...

psql your_database -c "insert into t1 (xml_column) values ('`cat /tmp/file.xml | sed -e \"s/'/''/g\"`');"

위의 형태로 입력하면 입력이 가능할거라고 하여 시도 했지만, 실패했습니다.

문제의 원인은 <? 으로 시작하는 테그와 <! 로 시작하는 테그가 xml 문법에 맞지 않는다고 하면서 입력이 거부되었습니다.

해당 테그를 삭제 후 위의 방법대로 하면 입력이 잘 됩니다.

 

제가 곤란함을 겪는 것은 파일의 갯수가 상상을 초월할 정도로 많기 때문에 모든 xml 파일에서 해당 테그를 제거 하고 난 후 입력하는 방법은 선택하기 어렵다는 것입니다. SQL Server에서는 convert(xmltype, ~~~~, 2) 형태로 입력하면 입력이 잘 되었습니다.

제가 xml 을 잘 몰라서 그러는데,... 아마 어떤 설정같은 것이 있어서 해당 테그를 무시하고 입력이 가능하게 하는 부분이 있는 듯 해서 검색을 해본 결과.... set xmloption {document | content} 라는 것이 있어서 몇번 테스트를 진행했지만 역시 모두 입력을 실패하였습니다.

그래서 문제를 돌아가는 형태로 varchar 컬럼에 입력 후 xml 로 type cast를 해볼까 하여 varchar 에 \copy 로 입력했으나... 개행 문자로 인해서 한 record로 입력되어야 할 xml 정보가 여러 record로 입력되는 사태가 발생하였습니다. ㅠㅠ

 

상황은 위와 같으며... 질문은 2가지 입니다.

1. xml 파일을 xml data type에 문제가 되는 테그를 xml에서 제거하지 않고 입력하는 방법이 궁금합니다.

2. varchar 에 \copy 로 data를 입력시 개행문자를 무시하고 1 record로 입력하는 방법이 있는지 궁금합니다.

 

 

PostgreSQL 고수님들의 도움 부탁드립니다. (지나온 삽질을 생각하니 눔물이 멈추지 않습니다.)

 

그럼 수고하세요.

[Top]
No.
제목
작성자
작성일
조회
8799윈도우 7 환경에 설치 에러
진은수
2011-03-29
8992
8798pg_dump 로 백업시... [2]
이기자
2011-03-29
11560
8797table dump 시 질문이요 [3]
소상무
2011-03-25
8955
8795COPY 질문입니다.
이성필
2011-03-21
8679
8794ODBC 관련 질문입니다.
유닉스
2011-03-17
8751
8793쿼리문좀 봐주세요 [1]
이기자
2011-03-17
8036
8792질의문 질문 드립니다. [1]
권기혁
2011-03-14
7797
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다