quinta-feira, 17 de março de 2011

Criar banco de dados Postgre com encoding Latin1 em um sistema UTF-8

Estes dias eu estava passando por uma pequena dor de cabeça. Meu sistema operacional que uso para desenvolvimento (Ubuntu 10.10) está configurado com o encoding utf-8 e o locale para pt_BR. Acontece que eu estava tentando usar o pgAdmin III para criar um banco de dados com encoding Latin1 (o nosso famoso ISO-8859-1). Eu abria o pgAdmin, mandava criar um novo banco de dados, dava um nome para ele, na opção codificação escolhia LATIN1, dava ok, e pimba! Recebia a seguinte mensagem:
Um erro ocorreu:

ERRO:  codificação LATIN1 não corresponde a configuração regional pt_BR.utf8
DETALHE:  A definição de LC_TYPE escolhida requer codificação UTF8.


Eu recitava uma meia-dúzia de nomes feitos mas não sabia o que fazer. Eis que a luz veio da singela resposta deste cara no StackOverflow. Fui para o terminal, loguei como o usuário postgres, e executei o comando da seguinte forma:
createdb -T template0 NOME_BANCO -E LATIN1 --locale=pt_BR
E pimba novamente! (Desta vez um pimba bom). Funcionou mesmo, tenho um banco chamado NOME_BANCO com encoding LATIN1 em meio a outros bancos com encoding UTF-8.

StackOverflow salva o dia novamente.

4 comentários:

  1. Eu ainda estou com o problema, quando eu dou o comando:
    postgres=# createdb -T template0 entun1.0 -E LATIN1 --locale=pt_BR
    ele só muda de postgres=# para postgres-# sem nenhum pimba bom hehe. Sabe como resolver? Se der certo ele vai aparecer no pgadmin?

    ResponderExcluir
  2. @delki8
    Sim, se o comando funcionar corretamente o novo bd vai aparecer no pgadmin.

    ResponderExcluir
  3. Vlw @Ricardo!
    Acabo de migrar um legado: [Ubuntu + Pg83 + latin1] para [CentOS 7 + Pg94 + latin1]
    E esse seu post foi vital pra mim, muito obrigado!

    Versão SQL do mesmo post do stack:

    CREATE DATABASE meu_db
    WITH ENCODING = 'LATIN1'
    LC_CTYPE = 'pt_BR'
    LC_COLLATE = 'pt_BR'
    TEMPLATE template0;

    Tenha certeza que o locale do sistema operacional esteja ok.

    http://www.postgresql.org/docs/9.4/static/sql-createdatabase.html
    http://stackoverflow.com/questions/4929180/configuring-locales-on-linux-for-postgresql

    ResponderExcluir