Mysql
 sql >> Base de données >  >> RDS >> Mysql

Modification du backend de la base de données Django de MySql à PostgreSQL

J'en ai eu marre de voir cette erreur en utilisant South et oui, le passage à PostgreSQL l'a banni !

L'application mysql2postgres, écrite en Ruby, suggérée dans les commentaires ci-dessus ne fonctionnait pas pour moi (elle fonctionnerait, afficherait certains détails à l'écran mais ne copierait aucune ligne de données, pour moi). Pas certain de pourquoi. Mais heureusement, il y a une réécriture Python qui a fonctionné parfaitement (pour moi, finalement) :
http://pypi.python.org/pypi/py-mysql2pgsql

Le seul piège que j'ai trouvé était :

Au départ, je pensais qu'il serait plus sûr de configurer les tables dans la base de données PostgreSQL via une base de données syncdb, puis de migrer uniquement les données. J'ai essayé cela, mais les tables sont migrées dans l'ordre alphabétique et cela viole les contraintes de clé étrangère pour certaines tables (les lignes se rapportent aux lignes des tables non encore importées).

J'ai ensuite essayé une migration structure + données. Cela a bien migré, mais j'ai rencontré quelques problèmes dans Django par la suite, en particulier le site d'administration. Il semblait que le script de migration avait créé des contraintes de table différentes de celles de Django.

J'ai résolu cela en piratant le script mysql2pgsql pour respecter l'ordre des tables indiqué dans la configuration yaml only_tables propriété... puis en effectuant une migration syncdb + données uniquement. Par essais et erreurs, j'ai mélangé l'ordre des tables pour ma migration jusqu'à ce qu'elles soient toutes importées avec succès.

MISE À JOUR :
Ma demande d'extraction pour le hack décrit ci-dessus a été acceptée, vous pouvez donc le faire maintenant à partir de la version principale :
https://github.com/philipsoutham/py-mysql2pgsql