Ich hatte die Aufgabe, eine PostgreSQL 8.2.x-Datenbank auf einen anderen Server zu migrieren. Dazu verwende ich den pgAdmin 1.12.2 (übrigens unter Ubuntu 11.04) und das Backup and Restore mit dem benutzerdefinierten / Komprimierungsformat (.backup) und der UTF8-Codierung.
Die ursprüngliche Datenbank ist in UTF8 wie folgt:
-- Database: favela
-- DROP DATABASE favela;
CREATE DATABASE favela
WITH OWNER = favela
ENCODING = 'UTF8'
TABLESPACE = favela
CONNECTION LIMIT = -1;
Ich erstelle diese Datenbank genau so auf dem Zielserver. Wenn ich die Datenbank jedoch mit der Option "Wiederherstellen" aus der Sicherungsdatei wiederherstelle, werden einige der folgenden Fehler angezeigt:
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
Wenn ich überprüfe, welcher Datensatz diesen Fehler ausgelöst hat, haben einige vartext-Felder diakritische Zeichen wie ç (in Portugiesisch beispielsweise "caça"), und wenn ich sie manuell aus dem Text in den Datensätzen entferne, wird der Fehler an den nächsten Datensatz weitergegeben Das hat sie - da beim Kopieren ein Fehler auftritt und das Einfügen von Daten in diese Tabelle gestoppt wird. Und ich möchte sie nicht einzeln manuell ersetzen, um dies zu erreichen.
Aber es ist irgendwie seltsam, denn mit UTF8 sollte es keine derartigen Probleme geben, oder?
Ich weiß nicht, wie sie überhaupt dorthin gekommen sind. Ich migriere nur die Datenbank und nehme an, dass die Datenbank irgendwie wie in LATIN1 war und dann nicht ordnungsgemäß in UTF8 geändert wurde.
Gibt es eine Möglichkeit zu überprüfen, ob eine Tabelle / Datenbank ungültige UTF8-Sequenzen enthält? Oder eine Möglichkeit, diese Zeichen in UFT8 umzuwandeln, damit beim Ausführen der Wiederherstellung keine Probleme auftreten?
Danke im Voraus.