Comment convertir une base de données MySQL en PostgreSQL?

20

Existe-t-il un outil en ligne de commande pour convertir la base de données MySQL en PostgreSQL? Je voudrais également savoir s'il existe un moyen de convertir la base de données à l'aide de la mysqldumpcommande normale .

Mughil
la source
1
Commencez ici: wiki.postgresql.org/wiki/…
a_horse_with_no_name
4
Chaque fois que je vois cela, je pleure des larmes de joie.
rfusca
ora2pg.darold.net
a_horse_with_no_name
C'est facilement l'une des questions les plus utiles de tout ce site.
Evan Carroll

Réponses:

13

as-tu essayé:

mysqldump --compatible=postgresql dbname > export.sql

puis faites cela pour échapper aux citations

sed "s/\\\'/\'\'/g" export.sql > export1.sql

peut nécessiter un peu plus de massage, alors regardez de plus près doco mysqldump.

Nick Kavadias
la source
2
J'ai déjà essayé la méthode que vous avez donnée mais elle donne une erreur lors de la restauration dans le postgresql
Mughil
2
@Mughil quelle est l'erreur?
Janus Troelsen
4
5 ans et personne n'est mysqldumpencore fixé . syntax error at or near "(" LINE 2: "id" int(10) NOT NULL,
Cees Timmerman du
1
Selon dev.mysql.com/doc/refman/8.0/en/… la seule valeur autorisée pour --compatibleestansi
phunehehe
7

Voici quelques outils open source, qui peuvent être très utiles:

FromMySqlToPostgreSql est un outil de portée de fonctionnalité et très facile à utiliser.
Il mappe les types de données, migre les contraintes, les index, les PK et les FK exactement comme ils l'étaient dans votre base de données MySQL.
Sous le capot, il utilise PostgreSQL COPY, donc le transfert de données est très rapide.
FromMySqlToPostgreSql écrit en PHP (> = 5.4).

pgloader   est un outil de chargement de données pour PostgreSQL, utilisant la commande COPY. Son principal avantage par rapport à la simple utilisation

COPY
ou
\copy
, et plus d'utiliser un wrapper de données étrangères, est son comportement de transaction, où pgloader conservera un fichier séparé de données rejetées, mais continuera d'essayer de copier les bonnes données dans votre base de données. Le comportement par défaut de PostgreSQL est transactionnel, ce qui signifie que toute ligne erronée dans les données d'entrée (fichier ou base de données distante) arrêtera le chargement en bloc complet de la table. pgloader implémente également le reformatage des données, un exemple typique de cela étant la transformation des horodatages MySQL 0000-00-00 et 0000-00-00 00:00:00 en PostgreSQL
NULL
valeur (parce que notre calendrier n'a jamais eu d'année zéro).
pgloader écrit en LISP et distribué en tant que code source, vous devez donc le compiler avant de l'utiliser.

J'espère que cela vous aidera ...

AnatolyUss
la source
1
pgloader est même un outil de migration recommandé sur les documents postgre, donc je dirais que c'est le meilleur choix. Je l'ai utilisé avec succès sur une assez petite base de données avec plus de 50 tables, fonctionnait comme un charme.
Capaj
3

Il existe en fait un outil de migration gratuit assez facile à utiliser, développé par EnterpriseDB lui-même. Il peut être installé via StackBuilder: Migration Toolkit

uygar.raf
la source
3

J'ai récemment utilisé un outil non gratuit de DBConvert pour convertir une base de données d'accès en postgres, et j'ai trouvé que cela en valait la peine par rapport au temps que j'ai perdu à essayer de le faire de manière fiable et gratuite. Vendre un outil similaire pour les postgres MySQL <-> , que je n'ai pas utilisé, mais qui pourrait valoir la peine d'être envisagé, sauf si vous n'êtes intéressé que par les outils de ligne de commande.

Dans le cas où vous vous demandez que je ne suis pas affilié à eux en aucune façon :-)

Jack Douglas
la source
3

Vous pouvez utiliser l'assistant de migration EnterpriseDB, par exemple.

Il peut facilement migrer OracleDB. Mais pour Mysql, il a certaines limitations, par exemple, il ne prend pas en charge les vues, les déclencheurs, les procédures stockées.

Pour plus d'informations, voir EDB Migration Toolkit . Pas sûr, mais il peut être possible de migrer mysql-> oracle-> postgresql en sauvegardant vos procédures stockées (si elles existent).

Grep this: Base de données et outils de migration SQL

shcherbak
la source
1

C'est juste pour compléter les réponses existantes, ce qui m'a aidé à trouver cette solution. J'ai utilisé FromMySqlToPostgreSql . Tout ce que vous devez faire est de télécharger et d'extraire FromMySqlToPostgreSql , de faire une copie de l'exemple de fichier de configuration, de définir les valeurs de connexion db et d'exécuter le fichier d'index avec la commande suivante:

php index.php config.xml

Simple mais efficace!

toing_toing
la source
Pourriez-vous modifier votre message avec un lien vers cet outil, s'il vous plaît?
dezso
Désolé, j'ai oublié ça. Ajoutée!
toing_toing
Ah, c'est drôle. Avez-vous réalisé que l'auteur de l'outil a également publié une réponse? ;) Maintenant je l'ai fait.
dezso
Je suis flatté! Il n'a cependant pas beaucoup décrit son merveilleux plugin.
toing_toing
0

Il existe un outil open source qui fournit des fonctionnalités pour convertir une base de données MySQL en base de données Postgresql, y compris les index, les fks et les données.

https://github.com/ggarri/mysql2psql

Cet outil permet également de définir des modifications de schéma afin que vous puissiez effectuer certaines mises à niveau de votre schéma actuel lors de l'exécution.

Gabriel Garrido
la source