Vous devriez pouvoir alimenter ce fichier de vidage directement dans psql
:
/path/to/psql -d database -U username -W < /the/path/to/sqlite-dumpfile.sql
Si vous voulez l'id
colonne en "incrémentation automatique" puis changez son type de "int" en "série" 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
commandes, elles doivent donc être supprimées.
Vous voudrez également vérifier datetime
colonnes dans le schéma SQLite et changez-les en timestamp
pour PostgreSQL. (Merci à Clay de l'avoir signalé.)
Si vous avez des booléens dans votre SQLite, vous pouvez convertir 1
et 0
à 1::boolean
et 0::boolean
(respectivement) ou vous pouvez remplacer la colonne booléenne par un entier dans la section schéma du vidage, puis les corriger manuellement dans PostgreSQL après l'importation.
Si vous avez des BLOB dans votre SQLite, vous voudrez ajuster le schéma pour utiliser bytea
. Vous aurez probablement besoin de mélanger un peu de decode
appelle aussi. Écrire un copieur rapide dans votre langage préféré peut être plus facile que de déformer le SQL si vous avez beaucoup de BLOBs à gérer.
Comme d'habitude, si vous avez des clés étrangères, vous voudrez probablement vous pencher sur set constraints all deferred
pour éviter les problèmes d'ordre d'insertion, placez la commande dans la paire BEGIN/COMMIT.
Merci à Nicolas Riley pour les notes sur les booléens, les blob 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
colonnes, vous pouvez donc supprimer cela ou ajouter une contrainte personnalisée telle que celle-ci :
CREATE TABLE tablename (
...
unsigned_column_name integer CHECK (unsigned_column_name > 0)
);
Alors que SQLite utilise par défaut les valeurs nulles pour ''
, PostgreSQL exige qu'ils soient définis comme NULL
.
La syntaxe du fichier de vidage SQLite semble être principalement compatible avec PostgreSQL, vous pouvez donc corriger quelques éléments et le transmettre à psql
. L'importation d'une grande quantité de données via SQL INSERT peut prendre un certain temps, mais cela fonctionnera.