Migração de encoding no PostgreSQL 8.3

Publicado por Alexandre Miguel de Andrade Souza em 09/12/2008

[ Hits: 15.077 ]

Blog: http://www.hipercenter.com

 


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

Instalando Kubuntu 7.10 com proxy

Permitindo conexão ao banco no PostreSQL 8.3

Leitura recomendada

Instalando PostgreSQL no FreeBSD

Criando domínio com função de validação no PostgreSQL

Autovacuum do PostgreSQL

Fazendo backup com PostgreSQL

PostgreSQL 9.1 64 bits - Instalação no Debian Squeeze

  

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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts