Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wechsel des Django-Datenbank-Backends von MySql zu PostgreSQL

Ich hatte es satt, diesen Fehler bei der Verwendung von South zu sehen, und ja, der Wechsel zu PostgreSQL hat ihn verbannt!

Die in Ruby geschriebene mysql2postgres-App, die in den obigen Kommentaren vorgeschlagen wurde, funktionierte bei mir nicht (sie würde laufen, einige Details auf dem Bildschirm ausgeben, aber keine Datenzeilen kopieren, für mich). Nicht sicher warum. Aber zum Glück gibt es eine Python-Umschreibung davon, die fehlerfrei funktioniert hat (für mich schließlich):
http://pypi.python.org/pypi/py-mysql2pgsql

Das einzige Problem, das ich gefunden habe, war:

Anfangs dachte ich, es wäre am sichersten, die Tabellen in der PostgreSQL-DB über eine Syncdb einzurichten und dann nur die Daten zu migrieren. Ich habe das versucht, aber die Tabellen werden in alphabetischer Reihenfolge migriert und dies verletzt die Fremdschlüsselbeschränkungen für einige Tabellen (Zeilen beziehen sich auf Zeilen in noch nicht importierten Tabellen).

Als nächstes versuchte ich eine Struktur + Datenmigration. Dies wurde gut migriert, aber ich bin danach auf einige Probleme in Django gestoßen, insbesondere auf der Admin-Site. Es schien, als hätte das Migrationsskript einige andere Tabellenbeschränkungen erstellt als Django.

Ich habe dies gelöst, indem ich das mysql2pgsql-Skript gehackt habe, um die Reihenfolge der Tabellen zu respektieren, die in der Yaml-Konfiguration only_tables angegeben ist Eigenschaft ... und dann eine syncdb + reine Datenmigration durchführen. Durch Versuch und Irrtum habe ich die Reihenfolge der Tabellen für meine Migration verschoben, bis sie alle erfolgreich importiert wurden.

UPDATE:
Meine Pull-Anfrage für den oben beschriebenen Hack wurde akzeptiert, sodass Sie dies jetzt von der Hauptversion aus tun können:
https://github.com/philipsoutham/py-mysql2pgsql