Sie sollten diese Dump-Datei direkt in psql
einspeisen können :
/path/to/psql -d database -U username -W < /the/path/to/sqlite-dumpfile.sql
Wenn Sie die id
wollen Spalte auf "auto increment" und ändern Sie dann ihren Typ von "int" in "serial" in der Tabellenerstellungszeile. PostgreSQL hängt dann eine Sequenz an diese Spalte an, sodass INSERTs mit NULL-IDs automatisch dem nächsten verfügbaren Wert zugewiesen werden. PostgreSQL erkennt auch AUTOINCREMENT
nicht Befehle, daher müssen diese entfernt werden.
Sie sollten auch nach datetime
suchen Spalten im SQLite-Schema und ändern Sie sie in timestamp
für PostgreSQL. (Danke an Clay für den Hinweis.)
Wenn Sie Booleans in Ihrem SQLite haben, können Sie 1
konvertieren und 0
zu 1::boolean
und 0::boolean
(bzw.) oder Sie könnten die boolesche Spalte im Schemaabschnitt des Dumps in eine Ganzzahl ändern und sie dann nach dem Import von Hand in PostgreSQL korrigieren.
Wenn Sie BLOBs in Ihrem SQLite haben, sollten Sie das Schema so anpassen, dass es bytea
verwendet . Wahrscheinlich müssen Sie etwas decode
einmischen ruft auch an. Einen Quick'n'Dirty-Kopierer in Ihrer Lieblingssprache zu schreiben, könnte einfacher sein, als die SQL zu verstümmeln, wenn Sie jedoch mit vielen BLOBs umgehen müssen.
Wie üblich, wenn Sie Fremdschlüssel haben, sollten Sie sich wahrscheinlich set constraints all deferred
ansehen Um Probleme bei der Reihenfolge der Einfügungen zu vermeiden, platzieren Sie den Befehl innerhalb des BEGIN/COMMIT-Paares.
Vielen Dank an Nicolas Riley für die Hinweise zu Booleschen Werten, Blobs und Einschränkungen.
Wenn Sie `
haben in Ihrem Code, wie er von einigen SQLite3-Clients generiert wird, müssen Sie sie entfernen.
PostGRESQL erkennt auch unsigned
nicht Spalten, also sollten Sie diese vielleicht weglassen oder eine benutzerdefinierte Einschränkung wie diese hinzufügen:
CREATE TABLE tablename (
...
unsigned_column_name integer CHECK (unsigned_column_name > 0)
);
Während SQLite Nullwerte standardmäßig auf ''
setzt , PostgreSQL erfordert, dass sie auf NULL
gesetzt werden .
Die Syntax in der SQLite-Dump-Datei scheint größtenteils mit PostgreSQL kompatibel zu sein, sodass Sie einige Dinge patchen und an psql
weitergeben können . Das Importieren eines großen Datenhaufens durch SQL INSERTs kann eine Weile dauern, aber es wird funktionieren.