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