Linux slogan
Visite também: BR-Linux.org · Dicas-L · NoticiasLinux · SoftwareLivre.org · UnderLinux · BestLinux
» Screenshot



» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha

» Wallpaper
Linux: SLACKWARE
Por UNDER


Artigo

Encoding do Postgres (latin1) e encoding do SO (Debian/Ubuntu)
Linux user
little_oak
06/01/2009
How to para modificar encoding do sistema operacional Linux (Debian, Ubuntu ou derivados) e do banco de dados Postgres (charset) para latin1.
Por: Little Oak
[ Hits: 3732 ]
Conceito: 10.0   1 voto(s)1 voto(s)1 voto(s)1 voto(s)1 voto(s) + quero dar nota ao artigo

Introdução

Se você está como estive tempos atrás: irado, revolto, sem esclarecimento de como as coisas funcionam em um excelente (talvez o melhor) SGDB - Postgres e está sofrendo com os males:

1 - Encoding do Sistema Operacional Linux Debian/Ubuntu ferrados (sim, você brasileiro e a droga do locale te mostrando coisas de americanos, pode uma coisa destas?)

2 - Mudar o Encoding do Postgres.

Antemão você precisa saber que o seu sistema foi configurado por algum bestão, isto mesmo, o cara instalou o sistema americano sendo brasileiro.

Ter um Postgres que não aceita nem a pau um encoding diferente (padrão dessa tosquisse sempre é UTF8).

Todas as configurações e comandos foram executados como usuário root.

Existem vários arquivos que fazem a configuração do locale, precisamos configurar todos eles e depois executar alguns comandos, vamos lá!

Edite o arquivo /etc/environment e altere as variáveis LANG e LANGUAGE de forma que fiquem iguais ao abaixo, se não existir, acrescente:

LANG="pt_BR"
LANGUAGE="pt_BR:pt:en"

O arquivo /etc/default/locale também deve ser editado e seu conteúdo deve ser:

LANG="pt_BR"
LANGUAGE="pt_BR:pt:en"

Execute o seguinte comando:

# echo "pt_BR pt_BR.ISO-8859-1" >> /etc/locale.alias

Este arquivo grava os aliases para os locales, isso é para facilitar as configurações.

No diretório /var/lib/locales/supported.d alguns arquivos que configuram os locales que serão gerados, por padrão existem três arquivos "en", "pt" e "local". Para nosso caso, pode apagar o "en" e o "pt" deixando apenas o "local".

Feito isso, edite o arquivo local e deixe seu conteúdo como abaixo:

pt_BR.ISO-8859-1 ISO-8859-1
en_US.ISO-8859-1 ISO-8859-1

Muito bem, configuramos os arquivos necessários para a geração dos locales, agora vamos reconfigurar.

Os comandos abaixo fazem o serviço:

# localedef pt_BR -i pt_BR -f ISO-8859-1
# localedef pt_BR.ISO-8859-1 -i pt_BR -f ISO-8859-1
# localedef pt_BR.ISO8859-1 -i pt_BR -f ISO-8859-1
# dpkg-reconfigure locales
# locale-gen -purge
# locale-gen


Acredito que apenas um desses três comandos fariam o serviço, mas como eu executei os três quando estava configurando o sistema, não vou tirar algum deles, é melhor executar a mais e funcionar do que executar a menos e não funcionar.

Reinicie o sistema e execute o comando abaixo para termos certeza que está tudo conforme o desejado.

# locale
LANG=pt_BR
LANGUAGE=pt_BR:pt:en
LC_CTYPE="pt_BR"
LC_NUMERIC="pt_BR"
LC_TIME="pt_BR"
LC_COLLATE="pt_BR"
LC_MONETARY="pt_BR"
LC_MESSAGES="pt_BR"
LC_PAPER="pt_BR"
LC_NAME="pt_BR"
LC_ADDRESS="pt_BR"
LC_TELEPHONE="pt_BR"
LC_MEASUREMENT="pt_BR"
LC_IDENTIFICATION="pt_BR"
LC_ALL=

# locale -a
C
en_US.iso88591
POSIX
pt_BR.iso88591

Agora sim, está tudo como deveria estar. Nosso sistema já está usando ISO-8859-1.

(ISO-8859-1 é LATIN1)

Corrigindo o Encoding do Postgres

Bem, esta é a hora do quebra-quebra, vamos lá:

1 - Crie uma nova instância (cluster) de gestão do Postgres:

$ sudo pg_createcluster -e LATIN1 -d /caminho/do/novoSGDB 8.3
cluster-8.3-2

Feito isto a porta que o postgres vai operar neste novo SGDB será 5433.

Criando super-user para administrar o Postgres:

# su - postgres
$ createuser -P

Digite o nome da role a ser adicionada: pglinux
Digite a senha para a nova role:
Digite-a novamente:
A nova role poderá criar um super-usuário? (s/n) s
CREATE ROLE

Quer ver os users?

$ psql
postgres=# \du
Lista de roles
Nome da role | Super-usuário | Cria role | Cria BD | Conexões | Membro de
---------+----------+-------+------+-------+-------
pglinux       | sim                    | sim            | sim         | ilimitado    |
postgres         | sim                    | sim            | sim         | ilimitado    |
(2 registros)

postgres=# \q

Informações complementares:

Fonte deste post: Corrigindo Maldito encoding do Postgres para poder usar banco de dados latin1 ou outro e mudar o encoding do Sistema operacional Ubuntu ou Debian

Navegação
   1. Introdução

Outros artigos deste autor
Nenhum artigo encontrado.

Leitura recomendada

Comentários
[1] Comentário enviado por d1avlo em 07/01/2009 - 01:17h:

Parabéns meu querido ;)

[2] Comentário enviado por wfox em 08/01/2009 - 17:37h:

Apenas um ponto:
UTF-8 eh um superset de charset e inclui os caracteres do iso-8859-1.

Muito trabalho foi feito e vem sendo feito pela equipe das principais distribuicoes linux no sentido de padronizar os sistemas em charset UTF-8. A Debian como uma das principais distro busca adotar este padrao.

A substituicao de qualquer charset pela codificacao UTF-8 eh um objetivo geral para melhor internacionalizacao dos sistemas e aplicativos e na contra-mao desta dificil evolucao vem este artigo combatendo o UTF-8 como se ele nao service ao pt_BR. Acredito que seja um equivoco e sugiro que busque maiores informacoes sobre o relato.
No mais, parabens pelo artigo que pode ser utilizado ao inverso. Quer dizer. Deve ser utilizado justamente ao inverso, no lugar de latin1 ou iso8859-1, utilizar UTF-8.

=)

[3] Comentário enviado por little_oak em 08/01/2009 - 18:37h:

Pois é irmão, sem dúvidas estou um pouco distante de um conhecimento sólido em postgres, mas foi isso que salvou 500 / mês a mais no meu antigo salário...

Acredito que seja um equivoco e sugiro que busque maiores informacoes sobre o relato.

Usa isto, e se não funcionar validamos como equívoco... ok? Não por sua afirmativa, mas pela necessidade que o artigo cobre.


A questão nÃo é que MATO A PAU, por que desenvolvo sobre UTF8, o lance é que tem gente que obriga você a utilizar latin1, fazer o que?

Abraços e bons estudos.

[4] Comentário enviado por gilmar_moretto em 03/06/2009 - 14:15h:

Artigo muito bom.

Mas tive um probleminha aqui no meu debian 5, se poderia me ajudar a resolve-¯lo fico agradecido.

É assim:

Tava tudo indo certinho até o ponto que o artigo se refere a 3 arquivos no diretório /var/lib/locales/supported.d só que eu não tenho esses 2 ultimos diretórios então dei "uma de malamdro " e usei um mkdir -p /var/lib/locales/supported.d e criei o arquivo local para jogar dentro desse esse conteúdo como descrito no artigo.

pt_BR.ISO-8859-1 ISO-8859-1
en_US.ISO-8859-1 ISO-8859-1

no mais os passos seguiram corretamente ( eu acredito) só que quando cheguei no ponto do comando

locale -a

ele me retorna esse resultado:

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
POSIX
pt_BR.utf8


E aí nada dá certo depois.

E agora, como poderia resolver isso? Poderia me dar uma luz?


[5] Comentário enviado por Luiz.trindade em 26/06/2009 - 15:17h:

Prezado Little Oak,

Faltou você informar que se faz necessário incluir um path no environment:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

Sem essa linha não funcionava no Debian 4.0 Ecth.

Quero acreditar que foi um esquecimento seu ou falta de conhecimento mesmo.

Ahhhhh...

Não esqueçam de reiniciar depois do ultimo passo viu?!?

Vida Longa e Próspera à todos!

[6] Comentário enviado por little_oak em 26/06/2009 - 15:54h:

DEUS DOS CÉUS, alguém me dê uma lógica para o comentário maravilhoso do senhor LUIZ TRINDADE, ou melhor, meu concorrente?

Abraços a todos e espero bons estudos a todos!


Contribuir com comentário
  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Copyleft© 2002-2009 Viva o Linux.com.br

Viva o Linux

A maior comunidade Linux do Brasil! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.