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):
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.
[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?
[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