PostgreSQL 8.2.x 데이터베이스를 다른 서버로 마이그레이션하는 작업이 제공되었습니다. 이를 위해 pgAdmin 1.12.2 (우분투 11.04)와 사용자 정의 / 압축 형식 (.backup) 및 UTF8 인코딩을 사용하여 백업 및 복원을 사용하고 있습니다.
원래 데이터베이스는 다음과 같이 UTF8입니다.
-- Database: favela
-- DROP DATABASE favela;
CREATE DATABASE favela
WITH OWNER = favela
ENCODING = 'UTF8'
TABLESPACE = favela
CONNECTION LIMIT = -1;
대상 서버에서 이와 같은 데이터베이스를 만들고 있습니다. 그러나 복원 옵션을 사용하여 .backup 파일에서 데이터베이스를 복원하면 다음과 같은 오류가 발생합니다.
pg_restore: restoring data for table "arena"
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 2173; 0 35500 TABLE DATA arena favela
pg_restore: [archiver (db)] COPY failed: ERROR: invalid byte sequence for encoding "UTF8": 0xe3a709
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".
CONTEXT: COPY arena, line 62
실제로이 오류가 발생한 레코드를 확인할 때 일부 vartext 필드에는 ç (예 : "caça"와 같이 포르투갈어로 사용)와 같은 발음 구별 부호 문자가 있으며 레코드의 텍스트에서 수동으로 문자를 제거하면 다음 레코드로 전달됩니다. 복사에 오류가 있으면이 테이블에 데이터 삽입을 중지합니다. 그리고 나는 이것을 달성하기 위해 하나씩 수동으로 교체하고 싶지 않습니다.
그러나 UTF8에서는 이런 종류의 문제가 없어야하기 때문에 다소 이상합니다.
나는 그들이 처음에 어떻게 거기에 도착했는지 모른다. 데이터베이스를 마이그레이션하는 중이며 데이터베이스가 LATIN1과 비슷하고 UTF8로 잘못 변경되었다고 가정합니다.
테이블 / 데이터베이스에 잘못된 UTF8 시퀀스가 있는지 확인하는 방법이 있습니까? 또는이 문자를 UFT8로 강제 변환하거나 다시 변환하여 복원을 실행할 때 아무런 문제가 발생하지 않습니까?
미리 감사드립니다.