Wie konvertiere ich eine MySQL-Datenbank nach PostgreSQL?


20

Gibt es ein Befehlszeilentool zum Konvertieren der MySQL-Datenbank nach PostgreSQL? Ich würde auch gerne wissen, ob es eine Möglichkeit gibt, die Datenbank mit dem normalen mysqldumpBefehl zu konvertieren .



4
Wann immer ich das sehe, weine ich vor Freude.
Rfusca


Dies ist leicht eine der nützlichsten Fragen auf dieser gesamten Website.
Evan Carroll

Antworten:


13

Hast du es versucht:

mysqldump --compatible=postgresql dbname > export.sql

dann tun Sie dies, um Anführungszeichen zu entgehen

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

Möglicherweise muss noch etwas massiert werden. Schauen Sie sich mysqldump doco genauer an.


2
Ich habe die von Ihnen angegebene Methode bereits ausprobiert, aber es kommt zu Fehlern beim Wiederherstellen im Postgresql
Mughil

2
@ Mughil was ist der Fehler?
Janus Troelsen

4
5 Jahre und niemand ist mysqldumpnoch repariert. syntax error at or near "(" LINE 2: "id" int(10) NOT NULL,
Cees Timmerman

1
Bis nach dev.mysql.com/doc/refman/8.0/en/... dem einzigen zulässigen Wert für --compatibleistansi
phunehehe

7

Hier sind einige Open-Source-Tools, die sehr hilfreich sein können:

FromMySqlToPostgreSql ist ein Tool mit umfangreichen Funktionen und sehr einfach zu verwenden.
Es ordnet Datentypen zu, migriert Constraints, Indizes, PKs und FKs genauso wie in Ihrer MySQL-Datenbank.
Unter der Haube wird PostgreSQL COPY verwendet, sodass die Datenübertragung sehr schnell ist.
FromMySqlToPostgreSql geschrieben in PHP (> = 5.4).

pgloader   ist ein Tool zum Laden von Daten für PostgreSQL mit dem Befehl COPY. Sein Hauptvorteil gegenüber nur mit

COPY
oder
\copy
und die Verwendung eines Foreign Data Wrappers ist das Transaktionsverhalten, bei dem pgloader eine separate Datei mit abgelehnten Daten aufbewahrt, aber weiterhin versucht, einwandfreie Daten in Ihre Datenbank zu kopieren. Das standardmäßige PostgreSQL-Verhalten ist transaktional, was bedeutet, dass jede fehlerhafte Zeile in den Eingabedaten (Datei oder entfernte Datenbank) das gesamte Massenladen für die Tabelle stoppt. pgloader implementiert auch die Neuformatierung von Daten. Ein typisches Beispiel hierfür ist die Umwandlung von MySQL-Datenstempeln 0000-00-00 und 0000-00-00 00:00:00 in PostgreSQL
NULL
value (weil unser Kalender nie ein Jahr Null hatte).
pgloader ist in LISP geschrieben und wird als Quellcode vertrieben. Sie müssen ihn also kompilieren, bevor Sie ihn verwenden können.

Hoffe es wird dir helfen ...


1
pgloader wird sogar als Migrationstool für Postgre-Dokumente empfohlen. Ich würde sagen, es ist die beste Wahl. Ich habe es mit Erfolg auf einer ziemlich kleinen DB mit mehr als 50 Tischen verwendet und es hat wie ein Zauber funktioniert.
Capaj

3

Es gibt tatsächlich ein kostenloses Migrationstool, das recht einfach zu verwenden ist und von EnterpriseDB selbst entwickelt wurde. Es kann über das StackBuilder: Migration Toolkit installiert werden


3

Ich habe kürzlich ein nicht-kostenloses Tool von DBConvert verwendet , um eine Access-Datenbank in Postgres umzuwandeln, und fand, dass es das Geld wert ist, verglichen mit der Zeit, die ich damit verbracht habe, es zuverlässig und kostenlos zu machen. Sie verkaufen ein ähnliches Tool für MySQL <-> Postgres , das ich nicht verwendet habe, aber es kann durchaus erwägenswert sein , es sei denn, Sie interessieren sich nur für Befehlszeilen-Tools.

Falls Sie sich fragen, bin ich in keiner Weise mit ihnen verbunden :-)


3

Sie können beispielsweise den EnterpriseDB-Migrationsassistenten verwenden.

Es kann OracleDB problemlos migrieren. Für MySQL gibt es jedoch einige Einschränkungen. Beispielsweise werden Ansichten, Trigger und gespeicherte Prozeduren nicht unterstützt.

Weitere Informationen finden Sie unter EDB Migration Toolkit . Ich bin nicht sicher, aber es kann möglich sein, mysql-> oracle-> postgresql zu migrieren, indem ich Ihre gespeicherten Prozeduren speichere (falls vorhanden).

Grep this: Datenbank- und SQL-Migrationstools


1

Dies ist nur eine Ergänzung der vorhandenen Antworten, die mir bei der Suche nach dieser Lösung geholfen haben. Ich habe FromMySqlToPostgreSql verwendet . Sie müssen lediglich FromMySqlToPostgreSql herunterladen und extrahieren , eine Kopie der Beispielkonfigurationsdatei erstellen, die DB-Verbindungswerte darin festlegen und die Indexdatei mit dem folgenden Befehl ausführen:

php index.php config.xml

Einfach und doch effektiv!


Könnten Sie bitte Ihren Beitrag mit einem Link zu diesem Tool bearbeiten?
Dezso

Entschuldigung, das habe ich vergessen. Hinzugefügt!
toing_toing

Ah, das ist lustig. Haben Sie bemerkt, dass der Autor des Tools auch eine Antwort gepostet hat? ;) Jetzt habe ich getan.
Dezso

Ich bin geschmeichelt! Er hat jedoch nicht viel über sein eigenes wundervolles Plugin beschrieben.
toing_toing

0

Es gibt ein OpenSource-Tool, das Funktionen zum Konvertieren einer MySQL-Datenbank in eine Postgresql-Datenbank mit Indizes, FKS und Daten bietet.

https://github.com/ggarri/mysql2psql

Mit diesem Tool können Sie auch Schemaänderungen definieren, damit Sie zur Laufzeit einige Aktualisierungen Ihres aktuellen Schemas durchführen können.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.