Мені було надано завдання перемістити базу даних PostgreSQL 8.2.x на інший сервер. Для цього я використовую pgAdmin 1.12.2 (до речі, на Ubuntu 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
Коли я перевіряю, який запис викликав цю помилку, у деяких полях текстових рядів є діакритичні символи типу ç (використовується в Португальській, наприклад, "caça"), і коли я вручну видаляю їх з тексту в записах, помилка переходить до наступного запису у них є - оскільки коли в копії є помилка, вона перестає вставляти дані в цю таблицю. І я не хочу їх замінювати вручну по черзі, щоб досягти цього.
Але це дивно, адже з UTF8 таких проблем не повинно бути, правда?
Я не знаю, як вони потрапили в першу чергу. Я лише мігрую базу даних, і я вважаю, що якимось чином база даних була як у LATIN1, а потім була неправильно змінена на UTF8.
Чи є спосіб перевірити, чи таблиця / база даних недійсні послідовності UTF8? Або будь-яким способом примусити / перетворити цих символів у UFT8, щоб у мене не виникло проблем при виконанні відновлення?
Спасибі заздалегідь.