você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

Bases de dados em UTF e ISO num mesmo banco postgresql

Colaboração: Alexandre Heitor Schmidt

Data de Publicação: 02 de julho de 2010

Esta dica é compatível com o postgresql, versão 8.4.

Passos para tornar possível ter bases em encodings diferentes no banco de dados:

Logado como algum usuário que tenha permissão de alterar o postgresql (usualmente root):

# backup das bases de dados (opcional)
for i in base1 base2 base3 base4; do echo $i...; pg_dump -Upostgres $i -f $i.sql.gz -Z 9; done
# backup do arquivo pg_hba.conf (opcional recomendado)
cp /etc/postgresql/8.4/main/pg_hba.conf /tmp
# apagar cluster
pg_dropcluster --stop 8.4 main
# criar cluster alterando o locale para POSIX e definindo encoding default como utf-8
pg_createcluster 8.4 main --locale=POSIX -e utf-8
# restaurar pg_hba.conf (opcional)
cp /tmp/pg_hba.conf /etc/postgresql/8.4/main
# inicializar o banco
/etc/init.d/postgresql-8.4 start

Pronto. O banco agora suporta diferentes encodings para cada base de dados. Veja os exemplos:

# criando uma base em latin1
createdb -Upostgres teste_latin1 -E latin1 -T template0
# criando uma base em utf-8
createdb -Upostgres teste_utf8

Note que o -T template0 se faz necessário pelo fato de, na criação do banco (pg_createcluster), termos definido que o encoding padrão seria utf-8. Isto faz com que a base template (e qualquer informação presente nela) possua esse encoding. Logo, não pode ser utilizada como modelo para uma base latin1. Já a base template0 é sempre uma base virgem e e, portanto, livre de qualquer informação dependente de encoding.

Para restaurar os backups feitos acima, crie cada uma das bases de dados e importe o arquivo .gz correspondente. Veja o exemplo:

createdb -Upostgres base_latin1 -E latin1 -T template0
cat base_latin1.sql.gz | gunzip | psql -Upostgres base_latin1
createdb -Upostgres base_utf
cat base_utf.sql.gz | gunzip | psql -Upostgres base_utf
.
.
.

Qualquer dúvida, as man pages são suas amigas. ;-)

Alexandre Heitor Schmidt é Engenheiro da Computação na SOLIS - Cooperativa de Soluções Livres


Veja a relação completa dos artigos de Alexandre Heitor Schmidt