Criando Database com diferentes encoding em banco de dados Postgresql

Postado em: 4 de dezembro de 2013 - Por: Bezaleel Ramos

postgresql

 

Quando fazemos a instalação de um banco de dados Postgresql, podemos enfrentar alguns problemas com relação ao encoding, uma vez que esta informação é baseada na localização do sistema operacional.

Veja o exemplo do meu o meu sistema operacional é Inglês.

postgres=# CREATE DATABASE dbteste ENCODING 'LATIN5';
ERROR: encoding LATIN5 does NOT MATCH locale en_PH.utf8
DETAIL: The chosen LC_CTYPE setting requires encoding UTF8.

Podemos confirmar com o comando locale.

#locale
LANG=en_US.UTF-8
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=

Para ir em frente e resolver esta questão, você usa novamente o comando locale com o parâmetro -a para verificar a localização guardada em C.

#locale -a
C
cs_CZ
cs_CZ.iso88592
cs_CZ.utf8
de_CH
de_CH.iso88591
de_CH.utf8
el_CY
el_CY.iso88597
el_CY.utf8
en_CA
en_CA.iso88591
en_CA.utf8

A partir daí, podemos criar o template usando os parâmetros LC_COLLATE ‘C’, LC_CTYPE’C’.

postgres=# CREATE DATABASE dbteste ENCODING 'LATIN5' TEMPLATE template0 LC_COLLATE 'C' LC_CTYPE 'C';

Feito este processo o banco foi criado com enconding LATIN5.

postgres=# \l

List OF DATABASES

Name      | Owner    | Encoding | Collation  | Ctype      | Access privileges
dbteste   | postgres | LATIN5   | C          | C          |
postgres  | postgres | UTF8     | en_PH.utf8 | en_PH.utf8 |
template0 | postgres | UTF8     | en_PH.utf8 | en_PH.utf8 | =c/postgres
: postgres=CTc/postgres
template1 | postgres | UTF8     | en_PH.utf8 | en_PH.utf8 | =c/postgres
: postgres=CTc/postgres

(5 ROWS)

 

nuvem_hibrida_reduz_custo_ti

 

Leia também