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.
Réponses:
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:
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 .
la source
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
INT NOT NULL AUTO_INCREMENT
(ou quelque chose comme ça) parSERIAL
TEXT
(pas de différence de vitesse à utiliserTEXT
,VARCHAR
ou similaire)`
ENGINE InnoDB
(ou autre)UNSIGNED
BYTEA
'
et rien d'autreCONCAT
en 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'
"
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
INSERT
s au lieu deCOPY
. 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.
la source
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.
la source