Temat trochę odgrzebany, ale dość często się pojawia, dlatego dorzucę swoje 3 grosze. Od wersji Postgres 8.1, pg_dump ma parametr -E, który odpowiada za encoding. Dzięki temu nie trzeba już bawić się w edycję plików i zamianę znaków.
Operacja zamiany Latin-2 -> UTF8 mogłaby wyglądać następująco:
1. tworzymy backup bazy (podając kodowanie do jakiego ma konwertować pg_dump)
- pg_dump -i -h localhost -p 5432 -U postgres -E UTF8 -F c -Z 9 -b -v -f "D:\test_db.backup" test_db
2. tworzymy pustą bazę z nowym kodowaniem tj. UTF8
3. wczytujemy backup

Trzeba zwrócić uwagę, aby nowo-utworzona baza miała poprawne kodowanie, tzn. takie jak ma backup. Jeśli kodowania będą różne to PgSQL złoży się pięknym błędem. Przynajmniej takie miałem doświadczenia z którymś wydaniem 8.3.x. Niestety nie pamiętam dokładnego numeru wersji.
Więcej o pg_dump pod tymi linkami:
- v8.1
http://www.postgresql.org/docs/8.1/interac...app-pgdump.html- v8.2
http://www.postgresql.org/docs/8.2/interac...app-pgdump.html- v8.3
http://www.postgresql.org/docs/8.3/interac...app-pgdump.htmlPełna lista konwersji jakie obsługuje PgSQL znajduje się w tabeli pg_conversion. Dokumentacja wspomina również o tworzeniu swoich konwersji kodowania, jednak nie sprawdzałem jak to działa w praktyce. Domyślnie Postgres obsługuje większość konwersji jakie możemy sobie wymyślić.