Başka bir sunucuya PostgreSQL 8.2.x veritabanını taşımak için görev verildi. Bunu yapmak için pgAdmin 1.12.2 (bu arada Ubuntu 11.04'te) kullanıyorum ve özel / sıkıştırma formatı (.backup) ve UTF8 kodlamasını kullanarak Yedekleme ve Geri Yükleme'yi kullanıyorum.
Orijinal veritabanı şu şekilde UTF8'de bulunur:
-- Database: favela
-- DROP DATABASE favela;
CREATE DATABASE favela
WITH OWNER = favela
ENCODING = 'UTF8'
TABLESPACE = favela
CONNECTION LIMIT = -1;
Bu veritabanını tam olarak hedef sunucuda bu şekilde oluşturuyorum. Ancak Geri Yükleme seçeneğini kullanarak veritabanını .backup dosyasından geri yüklediğimde bana bu hatalardan bazılarını verir:
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
Aslında hangi kaydın bu hatayı tetiklediğini kontrol ettiğimde, bazı vartext alanlarının ç gibi aksan karakterleri var (örneğin Portekizce, "caça") ve kayıtlardaki metinden manuel olarak kaldırdığımda hata bir sonraki kayda geçiyor kopyada bir hata olduğunda bu tabloya veri eklemeyi durdurur. Bunu başarmak için bunları tek tek manuel olarak değiştirmek istemiyorum.
Ama biraz garip çünkü UTF8 ile bu tür problemler olmamalı, değil mi?
İlk etapta oraya nasıl geldiklerini bilmiyorum. Ben sadece veritabanını geçiriyorum ve bir şekilde veritabanı LATIN1 gibi olduğunu ve daha sonra yanlış UTF8 olarak değiştirildiğini varsayalım.
Bir tablonun / veritabanının geçersiz UTF8 dizileri olup olmadığını kontrol etmenin herhangi bir yolu var mı? Ya da bu karakterleri UFT8'e zorlamak / yeniden dönüştürmek için herhangi bir yol, böylece geri yüklemeyi yürütürken herhangi bir sorunla karşılaşmam?
Şimdiden teşekkürler.