Suite

Après avoir tronqué une table dans postgres, pourquoi qgis perd-il la trace des mises à jour/fonctionnalités ?


J'exécute un script python qui alimente lentement les données dans une base de données postgres avec l'extension postgis. J'utilise l'autocommit et je valide une ligne à la fois. Horriblement lent, mais je dois le faire de cette façon pour une bonne raison :)

Une fois que j'ai ajouté une couche postgres, QGIS semble interroger la base de données de temps en temps et le nombre de fonctionnalités augmente. C'est génial, et me donne un retour visuel que mon script fonctionne.

Si j'arrête mon script, TRONQUE la table à l'aide de pgAdminIII et redémarre mon script, QGIS efface correctement l'affichage (il remarque qu'il n'y a pas de fonctionnalités). Cependant, il ne semble pas suivre les modifications ultérieures apportées à la base de données, et le nombre d'entités s'en tient au nombre de lignes qu'il y avait, plutôt qu'à 0. Je dois à nouveau ajouter la couche postgres, ce qui peut prendre un certain temps.

Est-ce un bug, une fonctionnalité ou est-ce que je fais quelque chose de mal ?

(Environnement : QGIS 2.12.1 Pise, Postgres 9.3.10, PostGIS 2.1.2, Ubuntu Tahr 32 bits)

Mettre à jour

Il semble qu'une fois que le nombre d'entités dépasse le nombre d'entités dans la base de données avant de tronquer la base de données, QGIS recommence à suivre les modifications.


J'ai trouvé comment contourner ce problème - utiliser un filtre sur le calque, et faites en sorte qu'il récupère toutes les fonctionnalités.

Dans mon cas, la table ne contenait qu'une géométrie, pas de champ d'identification. J'ai ajouté un champ bigserial appeléunidainsi…

CREATE TABLE randomised3 ( unid BIGSERIAL PRIMARY KEY, way geometry(Geometry,27571) ) WITH ( OIDS=FALSE );

Ensuite, j'ai ajouté un filtre sur la table - cela affichera toutes les lignes.

unid>0

L'actualisation du nombre de fonctionnalités est désormais réinitialisée à 0 lorsque je redémarre avec une table tronquée. Cliquer sur « tester » dans la boîte de dialogue du filtre semble également aider.

Il semble que sans filtre en place, QGIS utilise une valeur mise en cache du estimé nombre de lignes - l'ajout du filtre le force à recalculer.