82 votes

Importer un dump MySQL vers une base de données PostgreSQL

Comment importer un dump "xxxx.sql" de MySQL vers une base de données PostgreSQL ?

2 votes

Comment avez-vous créé votre fichier "xxxx.dump" à partir d'Oracle. Avez-vous utilisé export ou expdp ou rdbms.get_ddl ?

59voto

Rob Contreras Points 744

Cette question est un peu ancienne mais il y a quelques jours, j'étais confronté à cette situation et j'ai trouvé pgloader.io .

C'est de loin la façon la plus simple de le faire, vous devez l'installer, et ensuite exécuter un simple script lisp ( script.lisp ) avec les 3 lignes suivantes :

/* content of the script.lisp */
LOAD DATABASE
FROM mysql://dbuser@localhost/dbname
INTO postgresql://dbuser@localhost/dbname;

/*run this in the terminal*/
pgloader script.lisp

Et après cela, votre base de données postgresql aura toutes les informations que vous aviez dans votre SB MySQL.

Par ailleurs, assurez-vous de compiler pgloader, car au moment de la publication de cet article, l'installateur présente un bogue. (version 3.2.0)

33voto

Ne vous attendez pas à ce que cela fonctionne sans montage. Peut-être beaucoup d'édition.

mysqldump a un argument de compatibilité , --compatible=name où "name" peut être "oracle" ou "postgresql", mais cela ne garantit pas la compatibilité. Je pense que les paramètres du serveur comme ANSI_QUOTES ont également un certain effet.

Vous obtiendrez une aide plus utile si vous indiquez la commande complète que vous avez utilisée pour créer le vidage, ainsi que les messages d'erreur que vous avez obtenus, au lieu de dire simplement "Rien n'a fonctionné pour moi".

28voto

kyo Points 16731

Mac OS X

brew update && brew install pgloader

pgloader mysql://user@host/db_name postgresql://user@host/db_name

0 votes

Avec --verbose Je ne reçois que NOTICE Starting pgloader, log system is ready. après avoir réussi à le connecter en ajoutant des guillemets et ?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory .

1 votes

Fonctionne aussi sur Debian.

0 votes

Solution parfaite, également pour les utilisateurs de mac, n'oubliez pas que pour postgres, par défaut votre nom d'utilisateur pour mac est votre nom d'utilisateur de postgres

13voto

jibiel Points 2162

Pour les Googlers qui sont en 2015+ .
J'ai perdu toute la journée sur ce sujet et je voudrais résumer les choses.

J'ai essayé toutes les solutions décrites à este article par Alexandru Cotioras (qui est pleine de désespoir). De toutes les solutions mentionnées ici, une seule a fonctionné pour moi.

- lanyrd/mysql-postgresql-converter @ github.com (Python)

Mais cela ne suffit pas. Quand vous importerez votre nouveau fichier de conversion :

# \i ~/Downloads/mysql-postgresql-converter-master/dump.psql 

PostgreSQL vous informera sur les types désordonnés de MySQL :

psql:/Users/jibiel/Downloads/mysql-postgresql-converter-master/dump.psql:381: ERROR:  type "mediumint" does not exist
LINE 2:     "group_id" mediumint(8)  NOT NULL DEFAULT '0',

Vous devrez donc corriger ces types manuellement, conformément à la procédure suivante este table.

En bref, il l'est :

tinyint(2) -> smallint  
mediumint(7) -> integer
# etc.

Vous pouvez utiliser regex et tout éditeur cool pour le faire.

MacVim + Substitute :

:%s!tinyint(\w\+)!smallint!g
:%s!mediumint(\w\+)!integer!g

12voto

WhiteFang34 Points 28652

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X