On m'a confié la tâche de migrer une base de données PostgreSQL 8.2.x vers un autre serveur. Pour ce faire, j'utilise pgAdmin 1.12.2 (sur Ubuntu 11.04 d'ailleurs) et j'utilise la sauvegarde et la restauration en utilisant le format personnalisé / compressé (.backup) et l'encodage UTF8.
La base de données d'origine est en UTF8, comme ceci:
-- Database: favela
-- DROP DATABASE favela;
CREATE DATABASE favela
WITH OWNER = favela
ENCODING = 'UTF8'
TABLESPACE = favela
CONNECTION LIMIT = -1;
Je crée cette base de données exactement comme ça sur le serveur de destination. Mais lorsque je restaure la base de données à partir du fichier .backup à l'aide de l'option de restauration, cela me donne certaines de ces erreurs:
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
Lorsque je vérifie quel enregistrement a déclenché cette erreur, en fait, certains champs vartext ont des caractères diacritiques comme ç (utilisé en portugais, par exemple, "caça"), et lorsque je les supprime manuellement du texte dans les enregistrements, l'erreur passe à l'enregistrement suivant cela les a - puisque lorsque la copie a une erreur, elle cesse d'insérer des données sur cette table. Et je ne veux pas les remplacer manuellement un par un pour y parvenir.
Mais c'est un peu étrange car avec UTF8 il ne devrait pas y avoir ce genre de problèmes, non?
Je ne sais pas comment ils y sont arrivés en premier lieu. Je ne fais que migrer la base de données, et je suppose que la base de données était en quelque sorte comme dans LATIN1, puis a été incorrectement modifiée en UTF8.
Existe-t-il un moyen de vérifier si une table / base de données contient des séquences UTF8 non valides? Ou n'importe quel moyen pour appliquer / reconvertir ces caractères en UFT8 afin que je ne rencontre aucun problème lorsque j'exécute la restauration?
Merci d'avance.