Ubuntu 9.04 no Itautec W7635

14/05/2009 por adorilson

Como vocês todos devem saber, no último dia 23 foi lançado o Ubuntu 9.04. E quem me conhece sabe que eu sou um (in)feliz proprietário de um notebook Itautec Infoway Note W7635.

Quando eu instalei nele o Ubuntu 8.04, pensei em não tirá-lo tão cedo. Um motivo é por ele ser LTS e o outro é que já passei da fase de estar instalando todas as versões, principalmente o Ubuntu que tem uma a cada seis meses.

Não vi motivo para migrar para o Ubuntu 8.10, mas com o 9.04 foi diferente. Se falou tanto coisa boa dele, incluindo a ótima notícia de compatibilidade nativa com a placa de vídeo VIA Chrome, o que pude comprovar durante o Flisol em Natal rodando um live-cd, mas não cheguei a fazer a instalação. E hoje chegou o grande dia.

Ubuntu 9.04 no Itautec W7635

Ubuntu 9.04 no Itautec W7635

Sem fazer configuração alguma após a instalação, a compatibilidade foi a seguinte:

  • Video – OK
  • Saída para datashow – não testado
  • Som – sai nas caixas e no fone de ouvido. Mas quando está com fone de ouvido continua saindo nas caixas. Porém o som está ruim. Depois vejo o que pode ser feito.
  • Microfone – não testado
  • Tecla Fn – OK (com exceção do controle de brilho)
  • Touchpad – OK
  • USBs – OK
  • Placa de rede – OK
  • Rede sem fio – OK
  • Modem – nem enxerga o modem
  • Hibernar – OK

Ao longo dos dias vou relatando outras coisas boas e ruins que encontrar por aqui.

Conversão de MySQL para PostgreSQL – Parte II

02/05/2009 por adorilson

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. :D

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.

Conversão de MySQL para PostgreSQL

04/02/2009 por adorilson

Enquanto o banco de dados de código aberto mais popular do mundo é o MySQL, o banco de dados de código aberto mais avançado do mundo é o PostgreSQL.  Não é raro termos de fazer conversões de um para outro.

Depois de alguma ajuda do Amigoogle, encontrei o script mysql2pgsql. Como o nome sugere, este script faz a conversão de bancos de dados do MySQL para o PostgreSQL. Depois de baixá-lo e atribuir permissão de execução para o arquivo, para fazer a conversão é necessário gerar um dump do banco MySQL e executar o seguinte comando:

$ ./mysql2pgsql.perl [MYSQL] [POSTGRESQL]

Onde:

  • [MYSQL] é o arquivo dump que você gerou
  • [POSTGRESQL] é o arquivo que será gerado. Cuidado para não sobrescrever um arquivo que já exista

Depois disso, é só você pegar o arquivo gerado, executar no psql, ou PgAdmin III e ganhar alguns pontos com seu chefe. Em tese.

Abrindo um parênteses. Quando executei foi no PgAdmin III (que é o que eu costumo usar) ele não executou pelo problema que descrevo abaixo. Estava com este artigo praticamente pronto, quando dei ouvidos a voz do além que dizia: Você não testou isso no psql! Dito e feito. Testei e o danado não reclamou de nada. Então o problema que descrevo só acontece no PgAdmin III – eu sempre achei que o PgAdmin usava o psql por baixo. Fecha parênteses.

O arquivo gerado mysql2pgadmin é um arquivo com comandos SQL de criação (CREATE) de objetos do banco (tabelas, sequências, índices etc.) e seus respectivos comandos de INSERT.  Mas o padrão dele é também incluir comandos de remoção (DROP) desses objetos. Acontece que para os DROP’s das tabelas, ele gera a seguinte saída:

DROP TABLE “nome_tabela” CASCADE\g

O PgAdmin vai reclamar desse “\g”. Oh, céus. E agora?

Como todo software (livre) que se preze, o mysql2pgsql tem uma ajuda. Help para os íntimos.  Basta executá-lo com o parâmetro -h, como abaixo:

$ ./mysql2pgsql.perl -h

Atenção para o que diz a descrição do parâmetro –nodrop:

–nodrop: strips out DROP TABLE statements
otherise harmless warnings are printed by psql when the dropped table does not exist

Ótimo. Podemos gerar o arquivo para o PostgreSQL sem os ‘DROP TABLE’s. E sermos felizes.

Peraí. E se precisarmos que o DROP TABLE seja gerado? Isso é assunto para o próximo artigo. Nos vemos em breve. ;)