Suite

Ogr2ogr postgres import : vérifiez si l'ensemble de données existe


J'ai une base de données PostGIS que je mets à jour quotidiennement avec ogr2ogr à l'aide de fichiers CSV. Cela fonctionne très bien.

Existe-t-il un moyen de vérifier si la valeur réelle d'une colonne existe déjà dans la table (par exemple, "event_id" = abc123 (pas de clé primaire)) et si c'est le cas, qu'elle n'ajoutera pas l'ensemble de données à la table. Les autres ensembles de données qui ne figurent pas dans le tableau doivent être ajoutés au tableau.

Voici ma ligne de commande actuelle :

ogr2ogr -f "PostgreSQL" -append PG:"host=localhost user=user password=pw dbname=test" data.vrt -nln table_name

Ce que vous recherchez est essentiellement un upsert (mais sans la partie mise à jour). Cela ne fait pas partie de ogr2ogr et est assez compliqué à implémenter dans Postgres, voir la documentation, pour plus d'informations que vous ne voudriez jamais savoir sur les upserts.

Une alternative simple consisterait à utiliser une table temporaire dans laquelle insérer à partir de ogr2ogr, puis à exécuter une insertion uniquement pour les lignes où il n'y a pas d'événement_id, en utilisant soit une jointure gauche, soit une clause non existante.

INSÉRER DANS some_table SELECTIONNER t.* FROM some_table t LEFT JOIN temp_table tmp ON t.event_id = tmp.event_id O tmp.event_id EST NULL;