Vous devriez être en mesure d'alimenter ce fichier de vidage directement en psql
:
/path/to/psql -d database -U username -W < /the/path/to/sqlite-dumpfile.sql
Si vous voulez le id
pour "auto increment" puis changez son type de "int" à "serial" dans la ligne de création de la table. PostgreSQL attachera alors une séquence à cette colonne afin que les INSERTS avec des identifiants NULL se voient automatiquement attribuer la prochaine valeur disponible. PostgreSQL ne reconnaîtra pas non plus AUTOINCREMENT
Il faut donc les supprimer.
Vous devez également vérifier datetime
dans le schéma SQLite et les changer en timestamp
pour PostgreSQL. (Merci à Argile pour l'avoir signalé).
Si vous avez des booléens dans votre SQLite, vous pourriez convertir 1
y 0
a 1::boolean
y 0::boolean
(respectivement) ou vous pourriez changer la colonne booléenne en un entier dans la section schéma du dump et ensuite les corriger à la main dans PostgreSQL après l'importation.
Si vous avez des BLOBs dans votre SQLite, vous devrez ajuster le schéma pour qu'il utilise bytea
. Vous aurez probablement besoin de mélanger dans certains decode
appels également . Il peut être plus facile d'écrire un copieur rapide dans votre langage préféré que de manipuler le SQL si vous avez beaucoup de BLOB à gérer.
Comme d'habitude, si vous avez des clés étrangères, vous voudrez probablement vous pencher sur la question suivante set constraints all deferred
pour éviter les problèmes d'ordre d'insertion, en plaçant la commande à l'intérieur de la paire BEGIN/COMMIT.
Merci à Nicolas Riley pour les notes booléennes, les blobs et les contraintes.
Si vous avez `
sur votre code, tel que généré par certains clients SQLite3, vous devez les supprimer.
PostGRESQL ne reconnaît pas non plus unsigned
Il est donc préférable d'abandonner cette contrainte ou d'en ajouter une autre, comme celle-ci :
CREATE TABLE tablename (
...
unsigned_column_name integer CHECK (unsigned_column_name > 0)
);
Alors que SQLite met par défaut les valeurs nulles à ''
PostgreSQL exige qu'ils soient définis en tant que NULL
.
La syntaxe du fichier de vidage SQLite semble être compatible avec PostgreSQL, de sorte que vous pouvez corriger quelques éléments et le transmettre à psql
. L'importation d'un gros tas de données par le biais d'INSERTs SQL peut prendre un certain temps, mais cela fonctionnera.
5 votes
Cette commande n'a pas fonctionné pour moi jusqu'à ce que je modifie sqlite a sqlite3