Como converter mysql para postgresql? [fechadas]

14

Estou desesperadamente procurando por uma ferramenta de conversão para converter um grande banco de dados mysql no postgresql. Eu preciso que a ferramenta / script seja:

  • Livre
  • Funciona com Linux
  • Simples de usar e não de buggy
  • Você realmente tentou e confirma que funciona
  • De preferência, não escrito com Java ou Ruby

Eu tentei diferentes ferramentas listadas aqui , mas nenhuma funcionou para mim.

Agradeço antecipadamente.

hbp
fonte
Eu não sou especialista em PostgreSQL, ainda estou aprendendo. Eu removi minha resposta. No entanto, há outra pergunta sobre o uso do mysqldump com o postgresql postado por outra pessoa: dba.stackexchange.com/q/9792/877 . Espero que ajude !!!
RolandoMySQLDBA
1
O que há de errado com as ferramentas escritas em Java? E isso pode ajudar se você descreveu o que exatamente " não estava funcionando " com todos eles.
a_horse_with_no_name

Respostas:

7

A migração entre dois DBMS muito diferentes requer muito mais do que apenas a migração dos dados. Mas a migração dos dados é geralmente a parte mais fácil.

Do jeito que tentei, que é gratuito e posso confirmar que funciona:

  • crie um dump apenas de esquema mysql
  • Ajuste o SQL usando um editor de texto e muita pesquisa e substituição
  • execute o SQL convertido no Postgres
  • Crie um despejo de texto sem formatação do MySQL (por exemplo, CSV ou outro formato delimitado)
  • importar os dados usando o comando COPY do PostgreSQL

A importação dos dados pode ser realmente difícil se você confiar no comportamento do MySQL para aceitar dados ilegais (como 31 de fevereiro)

Meu palpite é que isso será mais rápido do que procurar uma ferramenta, avaliar várias delas e tentar entender a que você escolheu. Mas isso depende de que tipo de "grande" você está se referindo. Se grande for várias centenas de tabelas, isso pode não ser viável. Se grande se referir apenas ao número de linhas, provavelmente esta é a maneira mais rápida de fazer isso.

Existem algumas ferramentas por aí que podem despejar um esquema de banco de dados em um formato independente de DBMS (XML), como Liquibase , SchemaSpy ou WbSchemaReport . Com o Liquibase provavelmente sendo o mais fácil de usar. Os outros exigirão algum trabalho manual para escrever / estender o XSLT para transformar o XML gerado.

Se você estiver usando gatilhos e procedimentos armazenados em MySQL, eu não acredito que haverá qualquer ferramenta automatizada que podem traduzi-los sem a necessidade de uma grande fixação manual do depois - e, em seguida, os procedimentos gerados provavelmente não utilizar qualquer das funções avançadas dos SGBD alvo .

um cavalo sem nome
fonte
6

Tive que fazer isso recentemente e como levaria muito tempo para procurar uma ferramenta e poder fazer coisas com ela, eu fiz isso manualmente com vim e substituto-foo

  • substitua INT NOT NULL AUTO_INCREMENT(ou algo assim) porSERIAL
  • alterar everythig cadeia relacionados em um TEXT(nenhum diferença de velocidade em utilização TEXT, VARCHARou semelhante)
  • livrar-se desses f *** ing backticks `
  • nenhum mecanismo de armazenamento no Postgres; portanto, remova ENGINE InnoDB(ou o que for)
  • retirar UNSIGNED
  • todo campo BLOB é BYTEA
  • strings usam aspas simples 'e nada mais
  • tenha cuidado se você usar a concatenação de strings em algum lugar, a partir do 9.1, o Postgres suporta CONCATcomo um fallback para concatenação de strings não padrão, antes do 9.1 ele ser feito usando 'string' || ' string'
  • reescreva qualquer código processual ...
  • cuide dos nomes que estão reservados (por exemplo, tabela, nome, ...), bem como dos nomes em maiúsculas. Eles precisam ser citados duas vezes"
  • O índice deve ser praticamente o mesmo, pois a sintaxe não varia
  • Para tudo o que eu esqueci, confira os wikibooks sobre este tópico

Cada uma dessas balas deve ser feita com uma única substituição.

Exportei o esquema e os dados separadamente . Certifique-se de usar INSERTs em vez de COPY. Se não houver nada de lance, os dados devem exigir (quase) nenhuma limpeza. Verifique se está tudo ligado UTF-8. Com 2 arquivos separados, o esquema fica mais gerenciável e você não tem um arquivo de 1 GB para editar.

Ao carregar o esquema, você obtém informações bastante detalhadas onde há um erro, portanto, a depuração deve ser bem simples.

DrColossos
fonte
Olá, como converter dados de campo BLOB do MySQL para BYTEA do PostgreSQL? Eu descobri que se eu despejar os dados do Mysql como inserir sql, não consigo carregar os dados no PostgreSQL.
francs
1

Estou jogando isso lá fora, nunca tendo tentado, mas o Tungesten Replicator pode fazer o que você deseja. É principalmente uma ferramenta de replicação, mas acho que pode ter um processo de inicialização que pode ajudá-lo pelo menos com o pedaço de dados.

Aaron Brown
fonte