PostgreSQL: migrando de LATIN1 pra UTF-8

Para migração de bases, de LATIN1 pra UTF8 no postgresql, não existe uma ferramenta pronta para tal tarefa. Para tal, foi desenvolvido um roteiro (testado em um servidor RedHat5 e Debian 5 com PostgreSQL 8.1 em uma base de em torno de 2 Gb).
Recomendado que teste em um ambiente separado antes de aplicar o procedimento produção.

Primeiro, pare todos os serviços que utilizam o banco (ex. apache/php, tomcat, jboss) para não ter o risco de nenhum usuários alterar o banco durante o processo.
Nos comandos abaixo, substitua:
usuario_banco = usuário dono do banco, com permissões de apagar e criar bancos
meu_banco = o banco que vc quer fazer a migração

fazer um backup em texto plano

/usr/bin/pg_dump -i -h localhost -U usuario_banco -F p -D -v -f bancoL.sql meu_banco

Aqui está o segredo. Use o comando iconv para conversão:

iconv -f iso-8859-1 -t utf-8 bancoL.sql > bancoU.sql

Abra o arquivo bancoU.sql e no inicio, por volta da linha 7, onde tem “SET client_encoding = ‘LATIN1’;” troque LATIN1 por UTF8.

Com banco fazer:

Faça um backup, por garantia.
pg_dump -U usuario_banco -i -F c -b -f banco.backup meu_banco

Agora apague o banco inteiro
dropdb -h localhost -U usuario_banco meu_banco

crie-o em UTF8
createdb -h localhost -E UTF8 -U usuario_banco meu_banco

e agora restaure o banco convertido.
psql -h localhost -U usuario_banco -d meu_banco < bancoU.sql

caso use em seus SQL a função TO_ASCII, com UTF-8 ela não irã funcionar. Veja aqui a alternativa em um artigo passado.

Anúncios

6 Respostas to “PostgreSQL: migrando de LATIN1 pra UTF-8”

  1. Bruno Says:

    Eu estava com esse problema por causa do wordpress, e resolvi a conversão no MySQL usando um arquivo .php que gera um código SQL para ser executado no cliente (PHPMyAdmin).

    Se interessar:
    http://uninuni.com/convertendo-o-banco-de-dados-do-wordpress-de-latin1-para-utf8/

  2. Fábio Arezi Says:

    é PostgreSQL 🙂
    mysql != postgresql

  3. Bruno Says:

    Cara parabens pelo post! 😉

  4. Silfar Goulart Says:

    Fábio, li seu post na wiki do Maker.

    Você desenvolve com ele ?
    Tô com uns probleminhas aqui, e acho que por causa do encoding. VC já usou a versão 8.4 do postgres ?

    • Fábio Arezi Says:

      Oi Silfar, desenvolvo, menos agora, atualmente estou mais trabalhando com Oracle. Já usei a versão 8.4.
      Eu pessoalmente prefiro trabalhar com banco em UTF-8. 🙂

  5. hegberto Says:

    Fábio,

    Li o teu post, mas não consigo achar esse ICONV para conversão… esse cara vem junto com o post gres?
    preciso convertes de SQL_ASCII para UTF-8.. se tiver uma dica agradeço.. e muito..


Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: