Saya diberi tugas untuk memigrasi database PostgreSQL 8.2.x ke server lain. Untuk melakukan ini saya menggunakan pgAdmin 1.12.2 (pada Ubuntu 11,04 by the way) dan menggunakan Backup dan Restore menggunakan format kustom / kompres (.backup) dan pengkodean UTF8.
Database asli ada di UTF8, seperti:
-- Database: favela
-- DROP DATABASE favela;
CREATE DATABASE favela
WITH OWNER = favela
ENCODING = 'UTF8'
TABLESPACE = favela
CONNECTION LIMIT = -1;
Saya membuat database ini persis seperti ini di server tujuan. Tetapi ketika saya mengembalikan database dari file .backup menggunakan opsi Restore itu memberi saya beberapa kesalahan ini:
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
Ketika saya memeriksa catatan mana yang memicu kesalahan ini pada kenyataannya beberapa bidang vartext memiliki karakter diakritik seperti ç (digunakan dalam bahasa Portugis, misalnya, "caça"), dan ketika saya menghapusnya secara manual dari teks dalam catatan, kesalahan berlanjut ke catatan berikutnya yang memiliki mereka - karena ketika salinan memiliki kesalahan itu berhenti memasukkan data pada tabel ini. Dan saya tidak ingin menggantinya secara manual satu per satu untuk mencapai ini.
Tapi ini agak aneh karena dengan UTF8 seharusnya tidak ada masalah seperti ini, kan?
Saya tidak tahu bagaimana mereka sampai di sana. Saya hanya memigrasi database, dan saya kira entah bagaimana database seperti di LATIN1 dan kemudian diubah menjadi UTF8.
Apakah ada cara untuk memeriksa apakah tabel / database memiliki urutan UTF8 yang tidak valid? Atau cara apa pun untuk memaksakan / mengubah karakter ini ke UFT8 jadi saya tidak mengalami masalah ketika saya menjalankan pengembalian?
Terima kasih sebelumnya.