Mi è stato affidato il compito di migrare un database PostgreSQL 8.2.x su un altro server. Per fare ciò sto usando pgAdmin 1.12.2 (su Ubuntu 11.04 tra l'altro) e usando il Backup e il Ripristino usando il formato personalizzato / comprimere (.backup) e la codifica UTF8.
Il database originale è in UTF8, in questo modo:
-- Database: favela
-- DROP DATABASE favela;
CREATE DATABASE favela
WITH OWNER = favela
ENCODING = 'UTF8'
TABLESPACE = favela
CONNECTION LIMIT = -1;
Sto creando questo database esattamente come questo sul server di destinazione. Ma quando ripristino il database dal file .backup usando l'opzione Ripristina mi dà alcuni di questi errori:
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
Quando controllo quale record ha innescato questo errore, in effetti alcuni campi vartext hanno caratteri diacritici come ç (usato in portoghese, ad esempio "caça"), e quando li rimuovo manualmente dal testo nei record l'errore passa al record successivo quello li ha - poiché quando la copia ha un errore smette di inserire dati in questa tabella. E non voglio sostituirli manualmente uno per uno per ottenere questo risultato.
Ma è un po 'strano perché con UTF8 non dovrebbe esserci questo tipo di problemi, giusto?
Non so come ci siano arrivati in primo luogo. Sto solo migrando il database e suppongo che in qualche modo il database fosse come in LATIN1 e quindi sia stato erroneamente cambiato in UTF8.
Esiste un modo per verificare se una tabella / database ha sequenze UTF8 non valide? O un modo per imporre / riconvertire questi caratteri in UFT8 in modo da non incorrere in alcun problema quando eseguo il ripristino?
Grazie in anticipo.