Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha


Dica

Migração de encoding no PostgreSQL 8.3
Linux user
Publicado por Alexandre Miguel de Andrade Souza em 09/12/2008

Login: alexandremas, 14511 pontos | Blog: http://www.hipercenter.com
[ Hits: 5817 ]

Migração de encoding no PostgreSQL 8.3

Com muito custo consegui encontrar um caminho para migração de encondig no PostgreSQL.

Uma vez criado um banco com uma encoding (LATIN1, SQL_ASCII, UTF8), só é possível mudá-lo fazendo um backup e recriando o banco.

Embora a documentação do PostgreSQL informe sobre a opção -E no pg_dump, falta um "pulo do gato", que é o que vai ser apresentado neste passo a passo.

1. Se for migração de servidor, altere o arquivo pg_hba.conf (geralmente em /etc/postgresql/8.x/main/pg_hba.conf) do servidor antigo para incluir a linha:

hostnossl all postgres ipnovoservidor/32 trust

2. Reinicie o PostgreSQL no servidor antigo:

# service postgresql-8.3 restart

3. Faça um "su" para o usuário postgres no servidor novo:

# su postgres

4. Gere o backup no servidor novo (se for o mesmo servidor, a opção h é desnecessária) . UTF8 é um exemplo de encoding, mas de qualquer forma é recomendado como padrão):

$ pg_dump -h hostanti -C -E UTF8 -U postgres bancodedados > bancodedados.sql

5. O pulo do gato: a opção -E do pg_dump gera o ARQUIVO no encoding desejado. Mas a opção -C (que copia a estrutura original), copia fielmente, a ponto de gerar a linha:

CREATE DATABASE foh WITH TEMPLATE = template0 ENCODING = 'LATIN1';

com o encoding original, o que gera erro na importação.

O MACETE É TROCAR O ENCODING PARA O CORRETO:

CREATE DATABASE foh WITH TEMPLATE = template0 ENCODING = 'UTF8';

Obs.: Se o arquivo for grande, o "mcedit" (que uso muito), não dá conta de abrir, mas o "joe" não reclama.

6. Agora é só rodar:

$ psql -f bancodedados.sql


Outras dicas deste autor

Leitura recomendada
   Dica Linux recomendada Criando um tipo específico para retorno de dados no PostgreSQL
   Dica Linux recomendada PostgreSQL: Concedendo ou revogando privilégios em colunas
   Dica Linux recomendada Autovacuum do PostgreSQL
   Dica Linux recomendada Autenticação Squid em PostgreSQL
   Dica Linux recomendada Ativando acesso remoto ao PostgreSQL 8 no Fedora

Comentários
[1] Comentário enviado por hmascarello em 19/11/2009 - 22:48h:

Experimente baixar o arquivo HSQL do debian.
Muito bom executar comandos SQL para quem não sabe nada.

[2] Comentário enviado por ricelsouza em 13/01/2010 - 10:01h:

Olá,

Utilizo o Postrgres 8.3 e tenho bases nesse banco com ecoding UTF8.
Tento criar uma nova dase de dados em LATIN1 e recebo uma mensagem dizendo que não é possivel criar a base e que o encoding escolhido é imcompatível com o encoding do servidor (que é UTF8).
Não acredito que o Postgres 8.3 não permita criar bases com encoding diferentes em um mesmo server.
Estou querendo criar uma base em LATIN1 e migrar uma das bases de dados (que está como UTF8) sem perder os dados.
Como resolver esse problema?
Eu poderia fazer o backup da minha base em LATIN1, mesmo que a minha base esteja em utf8? Haveria perda de dados ou problema na hora de restaurar o banco?

Aguardo retorno.

Obrigado.

[3] Comentário enviado por alexandremas em 13/01/2010 - 10:41h:

Minha experiência é que não é possível ter encodings diferentes no mesmo server.
Isso evita problemas na manutenção.
Para converter o seu banco utf-8 para o latin1, e restaurá-lo em um server latin1, o procedimento é o mesmo acima.
Minha recomendação, é que por padrão, vc utilize o server em utf-8. é o futuro.

mas se por algum motivo vc precisa, siga o tutorial acima, alterando a linha do passo 4 para

pg_dump -h hostanti -C -E LATIN1 -U postgres bancodedados > bancodedados.sql

e no passo 5, altere a linha do arquivo para

CREATE DATABASE foh WITH TEMPLATE = template0 ENCODING = 'LATIN1';

não haverá problema ao restaurar o banco em um server LATIN!



Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.