Мне было поручено перенести базу данных PostgreSQL 8.2.x на другой сервер. Для этого я использую pgAdmin 1.12.2 (кстати, в Ubuntu 11.04), а также использую резервное копирование и восстановление, используя формат custom / compress (.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
Когда я проверяю, какая запись вызвала эту ошибку, на самом деле в некоторых полях из текстового поля есть диакритические символы, такие как ç (используется на португальском языке, например, «caça»), и когда я вручную удаляю их из текста в записях, ошибка переходит к следующей записи. у них есть - поскольку при копировании возникает ошибка, он прекращает вставку данных в эту таблицу. И я не хочу заменять их вручную один за другим для достижения этой цели.
Но это немного странно, потому что с UTF8 не должно быть таких проблем, верно?
Я не знаю, как они туда попали. Я только перемещаю базу данных, и я полагаю, что база данных каким-то образом была похожа на LATIN1, а затем была неправильно изменена на UTF8.
Есть ли способ проверить, есть ли в таблице / базе данных недопустимые последовательности UTF8? Или какой-нибудь способ принудительно / преобразовать эти символы в UFT8, чтобы у меня не возникало проблем при выполнении восстановления?
Заранее спасибо.