Pular para o conteúdo

Encode LATIN1 no PostgreSQL

Dica publicada em Linux / Introdução
bacteria bacteria_
Hits: 30.593 Categoria: Linux Subcategoria: Introdução
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Encode LATIN1 no PostgreSQL

Neste meu primeiro tutorial, vou ensinar uma maneira rápida e prática de adicionar o suporte ao LATIN1 no PostgreSQL.

Depois de inúmeras pesquisas na internet sobre como resolver o problema de encode no Postgres, deparei com infinitos artigos, tutoriais, dicas e afins dizendo que para resolver o problema, deve-se trocar o idioma do sistema operacional. Isso mesmo, trocar o idioma do sistema operacional.

Entendo que se você está no Brasil, deve instalar um sistema em português, mas eu particularmente, prefiro sempre o padrão inglês, porque por mais que você tente usar um sistema em português, uma hora ou hora aparece inúmeras mensagens em inglês, então pra evitar esse detalhe, eu sempre opto por instalar todo o sistema em inglês.

Neste tutorial, todos os comandos executados foram a partir do Ubuntu 14.04 Server, provavelmente deve funcionar em versões anteriores. Mão na massa.

Como já disse, a solução é muito mais simples do que parece.

Primeiro, precisamos adicionar suporte ao encode/idioma/locale desejado e no caso do LATIN1, usaremos "pt_BR.ISO-8859-1" com a seguinte linha de comando:

sudo echo "pt_BR.ISO-8859-1 ISO-8859-1" >> /var/lib/locales/supported.d/local

Agora vamos recompilar os encodes/idiomas/locales para serem suportados pelo sistema operacional:

sudo dpkg-reconfigure locales

Pronto. Seu sistema operacional já tem suporte a LATIN1 ou... ISO-8859-1, logo "pt_BR.ISO-8859-1". Simples assim, porém, partindo do pressuposto que seu banco de dados já esteja rodando enquanto efetuávamos as alterações, precisaremos reiniciá-lo, pois só assim ele carregará o suporte ao encoding.

Para isso, basta executar:

sudo service postgresql restart

Pronto. Seu Postgres já tem suporte a LATIN1. Mas para criar o banco de dados, você precisa informar alguns parâmetros para obter êxito na criação do banco, como:

CREATE DATABASE db_in_latin1 ENCODING 'LATIN1' LC_COLLATE 'pt_BR.ISO-8859-1' LC_CTYPE 'pt_BR.ISO-8859-1' template template0;

Informações gerais do sistema depois das alterações:

sudo su - postgres
psql

postgres=# CREATE DATABASE db_with_LATIN1 ENCODING 'LATIN1' LC_COLLATE 'pt_BR.ISO-8859-1' LC_CTYPE 'pt_BR.ISO-8859-1' template template0;

postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges

db_with_latin1 | postgres | LATIN1 | pt_BR.ISO-8859-1 | pt_BR.ISO-8859-1 |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(5 rows)


postgres=# \q

locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=


locale -a
C
C.UTF-8
en_US.utf8
POSIX
pt_BR.iso88591


lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.1 LTS
Release: 14.04
Codename: trusty


O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
Nenhuma dica encontrada.

Placa de rede Attansic Technology L2 (atl2)

Permissões práticas para usuários práticos

Funções de manipulação de strings

Instalar Webmin no Redhat e derivados

Squid com autenticação

#1 Comentário enviado por hellnux em 10/03/2015 - 15:01h
Olá!

Não entendo muito de Postgres, mas já usei o comando abaixo em determinada situação e parece ter resolvido, porém, para UTF-8. Talvez lhe seja útil.

Dentro do postgres:
update pg_database set encoding = pg_char_to_encoding('UTF-8');

Contribuir com comentário

Entre na sua conta para comentar.