Sie sollten in der Lage sein, diese Abbild-Datei direkt in psql
zu füttern:
/path/to/psql -d database -U username -W < /the/path/to/sqlite-dumpfile.sql
Wenn Sie die id
Spalt „Zuwachs auto“ zu wollen, dann seinen Typen von „int“ auf „serielle“ in der Tabelle Erstellungslinie. PostgreSQL wird dann eine Sequenz an diese Spalte anhängen, so dass INSERTs mit NULL-IDs automatisch den nächsten verfügbaren Wert zugewiesen bekommt. PostgreSQL erkennt auch keine AUTOINCREMENT
Befehle, daher müssen diese entfernt werden.
Sie werden auch für datetime
Spalten in der SQLite-Schema überprüfen möchten und sie für PostgreSQL (dank Clay für diesen Hinweis) zu timestamp
ändern.
Wenn Sie booleans in Ihrem SQLite haben dann Sie 1
und 0
und 1::boolean
und 0::boolean
(jeweils) umwandeln könnten oder könnten Sie die Boolesche Spalte auf eine ganze Zahl im Schema Abschnitt der Deponie ändern und sie dann von Hand reparieren innen PostgreSQL nach dem Import.
Wenn Sie BLOBs in Ihrer SQLite haben, sollten Sie das Schema so anpassen, dass es bytea
verwendet. Sie müssen wahrscheinlich einige decode
calls as well mischen. Das Schreiben eines Schnellkopierers in Ihrer Lieblingssprache ist möglicherweise einfacher als die SQL-Bearbeitung, wenn Sie viele BLOBs verwenden.
Wie üblich, wenn Sie Fremdschlüssel haben, dann werden Sie wahrscheinlich in suchen, um Probleme mit der Reihenfolge der Einfügung zu vermeiden, indem Sie den Befehl innerhalb des BEGIN/COMMIT-Paares platzieren.
Dank Nicolas Riley für die Boolean, Blob und Constraints Hinweise.
Wenn Sie in Ihrem Code `
haben, wie von einigen SQLite3-Clients generiert, müssen Sie sie entfernen.
PostGRESQL erkennt auch nicht unsigned
Spalten, könnten Sie, dass die gelöscht werden soll, oder eine maßgeschneiderte Einschränkung wie hinzufügen:
CREATE TABLE tablename (
...
unsigned_column_name integer CHECK (unsigned_column_name > 0)
);
Während SQLite Standardwerte Nullwerte ''
, erfordert PostgreSQL sie als NULL
eingestellt werden.
Die Syntax in der SQLite-Dump-Datei scheint größtenteils mit PostgreSQL kompatibel zu sein, so dass Sie einige Dinge patchen und an psql
füttern können. Das Importieren eines großen Datenstapels durch SQL-INSERTs kann eine Weile dauern, aber es wird funktionieren.
Thank you! Vielen Dank! Das hat super für mich funktioniert. Ich hatte ein Programm, das diese Migration zuerst machte, aber es war viel zu langsam und verursachte andere Probleme. Korrektur zu Ihrem Befehl. Es sollte -d, nicht -D sein. – DevX
Ein Hinweis, wenn jemand anderes dieses Problem hat, hatte SQLITE meine Null-Werte als "". POSTGRESQL benötigt NULL. Also starte vim und führe den Befehl:% s/''/NULL/g, um die Dump-Datei zu reparieren. – DevX
Nein, Sie möchten die Transaktion beibehalten, um einen gewissen Mehraufwand zu vermeiden. –