Encode LATIN1 no PostgreSQL

Publicado por bacteria em 10/03/2015

[ Hits: 29.201 ]

 


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


Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Ndiswrapper + rtl 8185

Protocolo SSH via browser (Firefox)

Blender ou KDEnlive?

timeout - Controlando o tempo que um comando deve ser executado

Utilizando as chamadas de sistema dup() e dup2()

  

Comentários
[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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts