Comment convertir mysql en postgresql? [fermé]

14

Je cherche désespérément un outil de conversion pour convertir une grande base de données mysql en postgresql. J'ai besoin que l'outil / le script soit:

  • Gratuit
  • Fonctionne sous Linux
  • Simple à utiliser et non buggy
  • Vous avez en fait essayé et confirmé que cela fonctionne
  • De préférence, non écrit avec Java ou Ruby

J'ai essayé différents outils répertoriés ici , mais aucun n'a fonctionné pour moi.

Merci d'avance.

hbp
la source
Je ne suis pas un expert PostgreSQL, j'apprends toujours moi-même. J'ai retiré ma réponse. Cependant, il y a une autre question sur l'utilisation de mysqldump avec postgresql posté par quelqu'un d'autre: dba.stackexchange.com/q/9792/877 . J'espère que cela aide !!!
RolandoMySQLDBA
1
Quel est le problème avec les outils écrits en Java? Et cela pourrait aider si vous décrivez ce qui ne fonctionnait pas exactement avec chacun d'eux.
a_horse_with_no_name

Réponses:

7

La migration entre deux SGBD très différents nécessite bien plus que la simple migration des données. Mais la migration des données est généralement la partie la plus simple.

La façon dont j'ai essayé, qui est gratuite et je peux confirmer que cela fonctionne:

  • créer un schéma mysql uniquement
  • Ajustez le SQL en utilisant un éditeur de texte et beaucoup de recherche et de remplacement
  • exécuter le SQL converti dans Postgres
  • Créer un vidage de texte brut à partir de MySQL (par exemple CSV, ou un autre format délimité)
  • importer les données à l'aide de la commande COPY de PostgreSQL

L'importation des données pourrait en fait être difficile si vous vous appuyiez sur le comportement de MySQL pour accepter des données illégales (comme le 31 février)

Je suppose que cela va être plus rapide que de rechercher un outil, d'en évaluer un tas et d'essayer de comprendre celui que vous avez choisi. Mais cela dépend du type de «gros» dont vous parlez. Si gros est plusieurs centaines de tables, cela pourrait ne pas être possible. Si gros ne fait référence qu'au nombre de lignes, c'est probablement le moyen le plus rapide de le faire.

Il existe certains outils qui peuvent vider un schéma de base de données dans un format indépendant du SGBD (XML), comme Liquibase , SchemaSpy ou WbSchemaReport . Liquibase étant probablement le plus facile à utiliser. Les autres nécessiteront un travail manuel d'écriture / d'extension du XSLT pour transformer le XML généré.

Si vous utilisez des déclencheurs et des procédures stockées dans MySQL, je ne pense pas qu'il y aura un outil automatisé qui puisse les traduire sans nécessiter une réparation manuelle majeure par la suite - et les procédures générées n'utiliseraient probablement aucune fonctionnalité avancée du SGBD cible .

un cheval sans nom
la source
6

J'ai dû le faire récemment et comme il aurait fallu trop de temps pour chercher un outil et pouvoir faire des trucs avec, je l'ai fait à la main avec vim et substitution-foo

  • remplacer INT NOT NULL AUTO_INCREMENT(ou quelque chose comme ça) parSERIAL
  • changer everythig chaîne liée à un TEXT(pas de différence de vitesse à utiliser TEXT, VARCHARou similaire)
  • se débarrasser de ces f *** ing backticks `
  • pas de moteurs de stockage dans Postgres, donc supprimez ENGINE InnoDB(ou autre)
  • retirer UNSIGNED
  • chaque champ BLOB est BYTEA
  • les chaînes utilisent des guillemets simples 'et rien d'autre
  • soyez prudent si vous utilisez la concaténation de chaînes quelque part, à partir de la version 9.1, prise CONCATen charge de Postgres comme solution de rechange pour la concaténation de chaînes non standard, avant la version 9.1, elle était effectuée à l'aide de 'string' || ' string'
  • réécrire tout code procédural ...
  • prendre soin des noms réservés (par exemple table, nom, ...) ainsi que des noms en majuscules. Ils doivent être cités deux fois"
  • L'indexation devrait être à peu près la même puisque la syntaxe ne varie pas
  • Pour tout ce que j'ai oublié, consultez les wikibooks sur ce sujet

Chacune de ces balles doit être effectuée avec une seule substitution.

J'ai exporté le schéma et les données séparément . Assurez-vous que vous utilisez INSERTs au lieu de COPY. S'il n'y a pas de trucs fantaisistes, les données ne doivent (presque) pas être nettoyées. Assurez-vous que tout est allumé UTF-8. Avec 2 fichiers séparés, le schéma devient plus gérable et vous n'avez pas de fichier de 1 Go à modifier.

Lors du chargement du schéma, vous obtenez des informations assez détaillées sur une erreur, donc le débogage devrait être assez simple.

DrColossos
la source
Salut, comment convertir les données de champ BLOB de MySQL en BYTEA de PostgreSQL? J'ai trouvé que si je vidais les données de Mysql en tant que insert sql, je ne pouvais pas charger les données dans PostgreSQL.
francs
1

Je lance ça là-bas, je ne l'ai jamais essayé, mais Tungesten Replicator peut faire ce que vous voulez. C'est principalement un outil de réplication, mais je pense qu'il peut avoir un processus d'amorçage qui peut vous aider au moins avec la donnée.

Aaron Brown
la source