Tools zur Migration von SQLite nach PostgreSQL

11

Ich muss kontinuierlich von SQLite zu PostgreSQL migrieren. Mit kontinuierlich meine ich, dass ich die SQLite-Datenbank jeden Tag erneut in PostgreSQL importieren werde. Es wäre schön, wenn ich nach Belieben Änderungen an den Tabellen in SQLite vornehmen könnte, ohne manuell Änderungen an der PostgreSQL-Datenbank vornehmen zu müssen. Ich werde die Migration von Python ausführen, aber es kann sich um ein beliebiges externes Tool handeln, das über die Befehlszeile gesteuert werden kann. Das Tool muss für Linux verfügbar sein, und es wäre schön, wenn es auch unter Windows laufen würde.

David
quelle
1
Müssen Sie zur Verdeutlichung sowohl Daten als auch Schema migrieren?
h0tw1r3
1
Im PG-Wiki überprüft ?
Denis de Bernardy
Könnten Sie näher erläutern, warum Sie dies tun müssen? Vielleicht gibt es bessere Möglichkeiten, um Ihr Grundproblem anzugehen, als die Datenbank zu kopieren und zu konvertieren. CleanFill schlug beispielsweise vor, eine ETL zu entwickeln.
Nick Chammas
@ Nick Es tut mir leid, aber es ist ein ganz besonderer Fall, dessen Beschreibung zu viel Erklärung / Diskussion erfordern würde.
David
@ David - Wenn Sie weitere Antworten wünschen, kann es in der Tat hilfreich sein, Ihren Anwendungsfall in einem anderen Absatz so gut wie möglich zusammenzufassen, ohne zu viel zu erklären / zu diskutieren. So wie es aussieht, bitten Sie uns, zu viel zu raten. Links zu anderen SE-Websites sind immer hilfreich, wenn sie uns helfen, zu verstehen, woher Sie kommen.
Jack sagt, versuchen Sie topanswers.xyz

Antworten:

3

Ich verwende Navicat für die Migration zwischen Datenbanken (hauptsächlich MSSQL / MySQL). Es läuft unter Linux und Windows, ist aber in erster Linie ein GUI-Tool. Wenn Sie ein Profil erstellen, kann es über die Befehlszeile gestartet werden. Sie können eine 30-Tage-Testversion herunterladen.

Pritaeas
quelle
Danke für den Tipp. Kann der gesamte Migrationsprozess mit einer einzigen Befehlszeileneingabe ausgeführt werden?
David
1
Ich schlage vor, dass Sie diese Frage dem Navicat-Support stellen. Sie sind sehr hilfreich (IMO). Laut der Website sollte es funktionieren, aber ich hatte nie die Notwendigkeit, dies zu testen / zu verwenden.
Pritaeas
4

Haben Sie sich mit der Verwendung von ETL-Tools befasst? Sie sind extern und ich glaube, Pentaho läuft sowohl unter Windows als auch unter Linux und es ist kostenlos. Pentahos Website

CleanFill
quelle
Hallo und willkommen auf der Seite! Ich weiß über Pentaho Bescheid, aber ich wusste nicht, dass es das lösen könnte. Kann es es lösen, denken Sie?
David
1
Ich habe beim Lesen der Frage auch über ETL nachgedacht, aber ich denke, der Aufwand und die Lernkurve sind ziemlich hoch. Darüber hinaus denke ich nicht, dass es einfach sein wird, die Migration "kontinuierlich" durchzuführen.
DrColossos
Vielen Dank! Ich persönlich habe mehr Erfahrung mit SSIS, aber das kommt mit SQL Server und Sie müssen für die SQL-Lizenz bezahlen. Pentaho ist ein ETL-Tool und kann Daten von der Quelle zum Ziel migrieren. Sie benötigen die richtigen Treiber, um mit der Quelle / dem Ziel zu kommunizieren. Bei jedem der ETL-Tools gibt es eine gewisse Lernkurve, aber es ist ein weiteres Tool in Ihrer Toolbox, oder? Es gibt mehrere Schritte 1 zum Migrieren von Daten und einen weiteren zum Migrieren von DDL-Änderungen. Ich würde mit 1 beginnen - verschieben Sie einfach die Daten (einfacher Schritt). Sobald Sie diese Daten gespeichert haben, können Sie bequemer fortfahren.
CleanFill
Angesichts des Klangs bin ich mir nicht sicher, ob die Verwendung von Pentaho angesichts der Lernkurve und der Komplexität der Verwendung eines neuen ETL-Tools schneller ist als das Schreiben von Grund auf in Java oder Python.
David
@ David - das Erlernen eines neuen ETL-Tools ist wahrscheinlich erheblich einfacher als die Neuerfindung des Rads IMO
Jack sagt, versuchen Sie es mit topanswers.xyz
2

Ich denke, es ist möglich, aber ich denke nicht, dass viele Leute damit zufrieden wären. Im allgemeinen Fall behandeln PosgreSQL und SQLite Tabellendefinitionen sehr unterschiedlich.

CREATE TABLE test (trans_date date primary key);

Wenn ich den Inhalt dieser Tabelle von SQLite speichere, bekomme ich Folgendes.

sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE test (trans_date date primary key);
INSERT INTO "test" VALUES('2011-01-01');
INSERT INTO "test" VALUES('Oh, bugger.');
COMMIT;

Ich denke, jede Spalte müsste VARCHAR () auf der PostgreSQL-Seite sein. Es ist möglicherweise nicht allzu schwierig, ein Skript zu schreiben, um alle SQLite-Datentypen in VARCHAR () zu ändern. Aber es fühlt sich sehr danach an, tote Wale den Strand entlang zu treten.

Mike Sherrill 'Cat Recall'
quelle
Das Konvertieren aller Spalten in VARCHAR wäre nicht gut genug. Es sollte ein Werkzeug dafür oder einen geeigneten Weg geben, dies zu tun.
David
In der obigen Beispieltabelle können Sie in PostgreSQL eine Tabelle mit einer Datumsspalte erstellen, aber nicht beide Zeilen in diese Tabelle importieren. Im Allgemeinen denke ich also, dass nichts anderes als VARCHAR (n) möglicherweise funktionieren könnte.
Mike Sherrill 'Cat Recall'
Warum bekommst du das "Oh, Mistkerl"? Wert von SQLite?
David
2
@ David: Weil Sie mit SQLite "Oh, Mist" in einer Spalte vom Typ "Datum" speichern können. Mit SQLite können Sie fast alles in nahezu jeder Spalte speichern. Dies ist eines der Hauptprobleme bei der Migration von SQLite auf eine Datenbank, die sich den SQL-Standards annähert.
Mike Sherrill 'Cat Recall'
1

Sie können verwenden

ESF Data Migration Toolkit .

Ich habe es ausprobiert, es funktioniert gut und bietet Ihnen Optionen für die Konvertierung von mehreren Datenbanktypen in mehrere Datenbanktypen: wie SQLite, MySQL, MSSQL, Oracle, PostgresQL und nur viele, viele!

Sie sehen sich auch nur die Test- / Evaluierungsversion an, die Ergebnisse sind wirklich zufriedenstellend!

Linuxeasy
quelle