Wie konvertiere ich mysql nach postgresql? [geschlossen]

14

Ich bin verzweifelt auf der Suche nach einem Konvertierungstool, um eine große MySQL-Datenbank nach PostGresQL zu konvertieren. Ich brauche das Tool / Skript, um zu sein:

  • Kostenlos
  • Funktioniert unter Linux
  • Einfach zu bedienen und nicht fehlerhaft
  • Sie haben tatsächlich versucht und bestätigt, dass dies funktioniert
  • Vorzugsweise nicht mit Java oder Ruby geschrieben

Ich habe verschiedene hier aufgeführte Tools ausprobiert , aber keines hat für mich funktioniert.

Danke im Voraus.

hbp
quelle
Ich bin kein PostgreSQL-Experte und lerne noch selbst. Ich habe meine Antwort entfernt. Es gibt jedoch eine andere Frage zur Verwendung von mysqldump mit postgresql, die von einer anderen Person gestellt wurde: dba.stackexchange.com/q/9792/877 . Ich hoffe es hilft !!!
RolandoMySQLDBA
1
Was ist los mit Tools, die in Java geschrieben wurden? Und es könnte hilfreich sein, wenn Sie beschreiben, was genau bei allen " nicht funktioniert ".
a_horse_with_no_name

Antworten:

7

Die Migration zwischen zwei sehr unterschiedlichen DBMS erfordert viel mehr als nur die Migration der Daten. Die Migration der Daten ist jedoch normalerweise der einfachste Teil.

Die Art und Weise, die ich ausprobiert habe, ist kostenlos und ich kann bestätigen, dass es funktioniert:

  • erstelle ein mysql schema only dump
  • Passen Sie die SQL mit einem Texteditor und viel Suchen und Ersetzen an
  • Führen Sie das konvertierte SQL in Postgres aus
  • Erstellen Sie einen Klartext-Dump aus MySQL (z. B. CSV oder ein anderes Format mit Trennzeichen).
  • Importieren Sie die Daten mit dem Befehl COPY von PostgreSQL

Das Importieren der Daten kann tatsächlich schwierig sein, wenn Sie sich auf das Verhalten von MySQL verlassen, um illegale Daten zu akzeptieren (wie zum Beispiel am 31. Februar).

Ich gehe davon aus, dass dies schneller gehen wird, als nach einem Werkzeug zu suchen, ein paar davon auszuwerten und dann zu versuchen, das von Ihnen gewählte zu verstehen. Aber es hängt davon ab, auf welche Art von "groß" Sie sich beziehen. Wenn mehrere hundert Tische groß sind, ist dies möglicherweise nicht möglich. Wenn sich big nur auf die Anzahl der Zeilen bezieht, ist dies wahrscheinlich der schnellste Weg, dies zu tun.

Es gibt einige Tools wie Liquibase , SchemaSpy oder WbSchemaReport , die ein Datenbankschema in einem von DBMS unabhängigen (XML-) Format sichern können . Mit Liquibase wahrscheinlich am einfachsten zu bedienen. Bei den anderen muss das XSLT manuell geschrieben / erweitert werden, um das generierte XML zu transformieren.

Wenn Sie Trigger und gespeicherte Prozeduren in MySQL verwenden, gibt es meines Erachtens kein automatisiertes Tool, mit dem diese übersetzt werden können, ohne dass anschließend umfangreiche manuelle Korrekturen erforderlich sind. In diesem Fall würden die generierten Prozeduren wahrscheinlich keine erweiterten Funktionen des Ziel-DBMS verwenden .

ein Pferd ohne Name
quelle
6

Musste es in letzter Zeit machen und da es zu lange gedauert hätte, nach einem Werkzeug zu suchen und damit zu arbeiten, habe ich es per Hand mit vim und substitution-foo gemacht

  • ersetzen INT NOT NULL AUTO_INCREMENT(oder so etwas) mitSERIAL
  • ändern everythig Zeichenfolge Zusammenhang in eine TEXT(keine Drehzahlunterschied bei der Verwendung TEXT, VARCHARoder ähnliches)
  • loszuwerden, die f *** ing Backticks `
  • keine Speicher-Engines in Postgres, also entferne ENGINE InnoDB(oder was auch immer)
  • entfernen UNSIGNED
  • Jedes BLOB-Feld ist BYTEA
  • Zeichenfolgen verwenden einfache Anführungszeichen 'und sonst nichts
  • Seien Sie vorsichtig, wenn Sie irgendwo eine Zeichenfolgenverkettung verwenden, beginnend mit 9.1. Die Postgres-Unterstützung war CONCATein Fallback für nicht standardmäßige Zeichenfolgenverkettungen, bevor 9.1 verwendet wurde 'string' || ' string'
  • Schreiben Sie einen beliebigen Prozedurcode neu ...
  • Achten Sie auf reservierte Namen (z. B. Tabelle, Name, ...) sowie Großbuchstaben. Sie müssen in doppelte Anführungszeichen gesetzt werden"
  • Der Index sollte ziemlich gleich sein, da die Syntax nicht variiert
  • Für alles, was ich vergessen habe, schauen Sie sich die Wikibooks zu diesem Thema an

Jede dieser Kugeln sollte durch eine einzige Ersetzung erfolgen.

Ich habe das Schema und die Daten separat exportiert . Stellen Sie sicher, dass Sie INSERTs anstelle von verwenden COPY. Wenn nichts los ist, sollten die Daten (fast) keine Bereinigung erfordern. Stellen Sie sicher, dass alles eingeschaltet ist UTF-8. Mit 2 separaten Dateien wird das Schema übersichtlicher und Sie müssen keine 1-GB-Datei bearbeiten.

Beim Laden des Schemas erhalten Sie ziemlich detaillierte Informationen, wo ein Fehler auftritt. Daher sollte das Debuggen ziemlich einfach sein.

DrColossos
quelle
Hallo, wie konvertiert man BLOB-Felddaten von MySQL nach BYTEA von PostgreSQL? Ich fand, wenn ich die Daten von MySQL als SQL einfügen, kann ich die Daten nicht in PostgreSQL laden.
Franken
1

Ich werfe das hier raus, habe es noch nie ausprobiert, aber der Tungesten Replicator kann tun, was Sie wollen. Es ist in erster Linie ein Replikations-Tool, aber ich denke, es hat möglicherweise einen Bootstrapping-Prozess, der Ihnen zumindest bei dem Datenstück helfen kann.

Aaron Brown
quelle