PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Convertir le fichier de vidage SQLITE SQL en POSTGRESQL

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.