Me dieron la tarea de migrar una base de datos PostgreSQL 8.2.x a otro servidor. Para hacer esto, estoy usando el pgAdmin 1.12.2 (en Ubuntu 11.04, por cierto) y el Respaldo y Restauración usando el formato personalizado / comprimido (.backup) y la codificación UTF8.
La base de datos original está en UTF8, así:
-- Database: favela
-- DROP DATABASE favela;
CREATE DATABASE favela
WITH OWNER = favela
ENCODING = 'UTF8'
TABLESPACE = favela
CONNECTION LIMIT = -1;
Estoy creando esta base de datos exactamente como esta en el servidor de destino. Pero cuando restauro la base de datos desde el archivo .backup usando la opción Restaurar, me da algunos de estos errores:
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
Cuando verifico qué registro desencadenó este error, de hecho, algunos campos de vartexto tienen caracteres diacríticos como ç (usado en portugués, por ejemplo, "caça"), y cuando los elimino manualmente del texto en los registros, el error pasa al siguiente registro eso los tiene, ya que cuando la copia tiene un error, deja de insertar datos en esta tabla. Y no quiero reemplazarlos manualmente uno por uno para lograr esto.
Pero es un poco extraño porque con UTF8 no debería haber este tipo de problemas, ¿verdad?
No sé cómo llegaron allí en primer lugar. Solo estoy migrando la base de datos, y supongo que de alguna manera la base de datos era como en LATIN1 y luego se cambió incorrectamente a UTF8.
¿Hay alguna forma de verificar si una tabla / base de datos tiene secuencias UTF8 no válidas? ¿O alguna forma de imponer / reconvertir estos caracteres en UFT8 para que no tenga ningún problema cuando ejecuto la restauración?
Gracias por adelantado.