Suite

Clé étrangère perdue lors de la conversion de SQLite en PostgreSQL à l'aide de ogr2ogr


Je souhaite centraliser plusieurs petites bases de données sqlite dans une seule grande base de données postgresql. J'utilise ogr2ogr pour convertir mes bases de données sqlite / spatialite (v3.7.17 / v4.1.1), chacune composée d'une table de géométrie et de plusieurs tables d'attributs (liées à la table de géométrie via des clés étrangères), vers la base de données postgresql / postgis ( v9.3 / v2.1.3). Voici le code :

ogr2ogr -append -lco LAUNDER=no -lco SCHEMA=public -lco GEOMETRY_NAME=geom -f PostgreSQL PG:"… " -a_srs EPSG:4269 c:Mydata1.sqlite ligne attrib1 attrib2

Toutes mes clés primaires int4 (ex: line_pk, attrib1_pk, attrib2_pk) sont converties en type série et leurs noms sont tous changés en le même nom: ogc_fid (par exemple, j'ai ogc_fid comme PK dans ma ligne, les tables attrib1 et attrib2). Je peux vivre avec ça, mais je trouve que toutes mes contraintes de clé étrangère (de la base de données sqlite) sont éliminées pendant le processus de conversion ! Une idée pourquoi c'est ainsi et comment corriger cela? Je peux toujours recoder les contraintes manuellement, mais je devrai alors gérer d'une manière ou d'une autre la valeur qui est mise dans mes clés étrangères chaque fois que j'ajoute un nouvel ensemble de données…


Je ne crois pas que GDAL se soucie des contraintes de clé étrangère et du modèle relationnel. Il a juste fait pour gérer une couche à la fois. J'envisagerais de copier vos clés primaires int4 dans des attributs normaux et de veiller, côté Spatialite, à ce qu'elles soient uniques sur toutes vos bases de données distinctes. Une fois que les données source sont en ordre, vous pouvez ajouter toutes les données dans des tables PostGIS et créer des index uniques et des contraintes de clé étrangère. Lorsque vous ajoutez encore plus de données, vous devez vérifier la valeur d'ID max de PostGIS et mettre à jour les nouveaux ID à partir de (max+1).

Vous pouvez définir le nom de la clé primaire que GDAL crée avec l'option de création de couche -lco FID=xxx comme documenté dans http://www.gdal.org/drv_pg.html mais cela ne résout pas votre vrai problème.


Voir la vidéo: Codible SQLite video 7: Doing a self-join of a table with itself in SQLite3 (Octobre 2021).