Ich bin gerade dabei, meine MySQL-Datenbank auf PostgreSQL zu migrieren. Fast alles ist gut gelaufen (naja, nachdem ich viel nach korrekten mysqldump-Parametern gegoogelt habe usw.), bis auf eine Tabelle, die ich habe - eigentlich die wichtigste Tabelle in meiner App.
Die Tabellenstruktur ist sehr einfach:
mysql> show create table samples;
.. skipped ...
CREATE TABLE `samples` (
`File_ID` int(11) NOT NULL,
`File` longblob,
PRIMARY KEY (`File_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=binary
aber es ist sehr groß (> 20 GB).
Ich habe versucht, den Parameter --hex-blob von mysqldump zu verwenden, aber Daten in diesem Format werden von PostgreSQL nicht akzeptiert, als ich versuchte, das resultierende Dumpfile als Befehlsdatei zu verwenden. Eine andere Option, die ich ausprobiert habe, ist die Verwendung der Option --tab, um nur einen Speicherauszug abzurufen und ihn dann mit dem Befehl COPY in PostgreSQL einzufügen sind ungültige Zeichen.
Ich würde mich sehr freuen, wenn Sie mir diesbezüglich einen Rat geben würden - obwohl ich langsam denke, dass das Schreiben eines benutzerdefinierten Migrationstools keine schlechte Idee ist ...
quelle
Antworten:
Ich denke, der einfachste Weg ist, diesen
--hex-blob
Schalter zu benutzenmysqldump
und per psql wiederherzustellen, mitdecode(string text, type text)
. Es ist jedoch nicht so einfach, da Sie ein wenig produziertes Dump (sed, awk) ändern müssen, um diese Dekodierungsfunktion hinzuzufügen. Beispielsweise:PSQL-Sitzung:
quelle
sed "s/0x\([0-9A-F]*\)/decode('\1','hex')/g" prepg.dump > pg.dump