De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
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
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários