Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

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

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 2.93/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 2.9 /5 (777 votos)

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script
Lan University

Submarino.com.br

Encontre imóveis, apartamentos e casas a venda no Imobilien
Saiba mais

 

 

Procure pela casa ou apartamento ideal à venda ou para aluguel na busca inteligente do Imohoo
Buscar imóveis