RSS

Conversão de MySQL para PostgreSQL – Parte II

02 maio

No artigo anterior, eu falei que um pequeno problema no script mysql2pgsql impedia de executar no pgAdmin III o arquivo gerado. E que a saída foi gerarmos o arquivo sem os ‘DROP TABLE’s. Finalizei perguntando o que fazer se precisássemos dos benditos DROP’s.

Bom, nós podemos:

  • Gerar com os DROP’s e corrigir o problema manualmente substuindo o ‘\g’ por ‘;’. Usar o recurso de um editor de texto para Localizar e Substituir também ajudaria muito;
  • Esperar sair uma nova versão com a correção desse erro;
  • Informar aos desenvolvedores do erro, o que seria uma ajuda para o item acima;
  • Desistir do mysql2pgsql e pedir novamente ajuda ao Amigoogle;
  • além das anteriores, xingar o software (livre) e seus desenvolvedores
  • O que mais?

Lembremos da definição de software livre. Um das liberdades é:

A liberdade de aperfeiçoar o programa, e liberar os seus aperfeiçoamentos, de modo que toda a comunidade se beneficie (liberdade nº 3). Acesso ao código-fonte é um pré-requisito para esta liberdade;

Pronto. Todos os nossos problemas acabaram-se. Basta pegar o código-fonte e fazer as alterações. Lindo isso, né? O mysql2psql é um script Perl. E eu nunca andei de camelo.😦 Mas foi aí que eu soube que sabia programar em Perl.😀

Vamos pensar um pouco. A linha que continha o erro era algo do tipo:

DROP TABLE “nome_tabela” CASCADE\g

O DROP TABLE e o CASCADE são comandos SQL, portanto são fixo. Então, basicamente bastava encontrar o comando Perl que joga as coisas na tela, que no caso é print (descobri quando abri o arquivo), contendo esses termos com alguma variável no meio deles, que seria o nome da tabela, e o famigerado “\g”.

Eu gosto muito do (ou da) Geany e com ele(a) pesquisei por “DROP TABLE”, depois de alguns encontros em comentários cheguei na linha 344.

$pre_create_sql .= “DROP TABLE $table CASCADE\\g\n”; # custom dumps may be missing the ‘dump’ commands

Repare que ela não tem o print, mas certamente essa variável $pre_create_sql será impressa. Agora é só substituir o  \g pelo ;. Fiz isso e funcionou perfeitamente.

Até aqui usei o direito de aperfeiçoar o programa. Mas e se outra pessoa também precisar disso? Então vamos liberar o aperfeiçoamento, enviando o script alterado para os autores. Como o caso é simples*, enviarei mesmo por email para o autor que pelo nome eu julgo ser brasileiro e ver no dá.

*Existem outras forma mais modernas de fazer isso.

 
Deixe um comentário

Publicado por em 02/05/2009 em Sem categoria

 

Tags: , , ,

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

 
%d blogueiros gostam disto: