PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Konvertieren Sie die SQLITE-SQL-Dump-Datei in POSTGRESQL

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.