2011-09-15 4 views
1

한 서버에서 다른 서버로 POSTGRESQL 데이터베이스를 이동하려고합니다. 그렇게하기 위해서, 나는 pg_dump를 수행했고 새로운 서버에서 새로운 데이터베이스를 생성 한 후, pg_dumped 파일을 복원하려고 시도했다. 대부분의 경우 복원은 괜찮 았지만 하나의 테이블은 복사되지 않았습니다.잘못된 UTF8 바이트 시퀀스에 문제가 있습니다.

pg_restore: [archiver (db)] COPY failed: ERROR: invalid byte sequence for encoding "UTF8": 0x92 
HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding". 

지금, 데이터베이스 속성을 확인 후, 원래의 테이블이 SQL_ASC2으로 인코딩 된 것을 알 수 있지만, 내가 만든 새가 UTF8입니다. 인코딩에 대해서는 모르지만 ASC2와 UTF8 역 호환되지는 않습니까? 그래서, 왜 유효하지 않은 바이트 시퀀스가 ​​있습니까?

새 데이터베이스를 SQL_ASC2를 사용하는 데이터베이스로 변경하면이 문제가 해결됩니까? 새 데이터베이스의 인코딩을 변경해야한다면 어떻게해야합니까? 방금 변경하거나, 처음부터 다시 시작하여 전체 데이터베이스를 다시 만들어야합니까?

도움 주셔서 감사합니다.

답변

1

당신이 'LATIN9'에 CLIENT_ENCODING을 설정할 수 데이터베이스에 연결하기 전에 (아마 무엇인가, 어쨌든 : 그것은 허용됩니다) 당신은이 작업을 수행 할 수 있습니다하십시오 -f my_filename 플래그

1) 발행 pg_restore에 .)) 상단에 현재

3 "psql의 -U 사용자 이름 DBNAME < 파일 이름"에 제출합니다.;

2) 아마 이미 "= 'UTF8'를 CLIENT_ENCODING SET"는이 (결과 파일을 편집합니다. (대개의 경우 다른 사용자 이름 또는 dbname을 제공해야하며 "\ connect newdbname"은 스크립트 상단에 위치하며 대신 사용자를 생성해야합니다.)

+0

고마워, 내가 말한대로 정확히하지 않았지만 문제의 테이블에 대한 백업 파일을 만들 때 latin9를 선택한 다음 테이블을 복원했다. 데이터 중 일부는 조금 다르게 보입니다. 사실 일부는 아직 읽을 수 있지만 일부는 펑키 한 문자가 있지만 오히려 이전에는 펑키 한 형식이었습니다. – zermy

0

If 당신이 * nix 상자에 있고 pg_dump 파일이 일반 텍스트라면, 덤프 파일을 포스트그레스로 가져 오기 전에 iconv을 통해 덤프 파일을 실행 해 볼 수 있습니다.

관련 문제