sábado, 23 de abril de 2011

PostgreSQL - Migrando bases de ISO8859-1 para UTF8

Este post é dedicado aos que precisam migrar uma base de um encode para outro, vamos usar o exemplo aqui de UTF8 para ISO-8859-1.

Então vamos lá, imagine que você tenha um dump da database que precisa migrar.

Vou considerar que você já tenha feito os pontos abaixo:

1 - Backup de tudo
2 - O dump já feito e a database que deve ser migrada já foi "dropada".

O grande segredo é o comando 'iconv' do Linux, então vamos usá-lo para converter seu dump:

iconv -f utf-8 -f iso-8859-1 teu_dump_uft8.sql > teu_dump_iso88591.sql

Neste passo já pode utilizar o pipe e psql para já importar o dump sem gerá-lo se não tiver espaço em disco.

MAS, não esqueça de trocar o encode do client, com o seguinte comando:

sed "s/SET client_encoding = 'UTF8';/SET client_encoding = 'LATIN1';/g" teu_dump_iso88591.sql  > teu_dump_iso88591-new.sql

Feito isso vamos importar o tal do dump convertido: psql -U postgres teu_banco < teu_dump_iso88591-new.sql

Pronto, agora só não funcionará se tiver nesta database o uso da function  'TO_ASCII', se você precisar utilizar essa função siga as instruções deste blog:

>  http://arezi.wordpress.com/2008/04/09/postgresql-funcao-to_ascii-em-banco-utf-8/

2 comentários: