Utilisation de DBManager avec PostGIS
Comme nous l'avons vu dans le cours sur SpatiaLite, il est possible d'utiliser le plugin DbManager.
Si la base de données PostgreSQL/PostGIS est protégée par un mot de passe, il faut le saisir dans la fenêtre qui apparaît pour cela.
Nous rappelons ici les principales étapes...
La fenêtre suivante apparaît indiquant que la connexion avec la base de donnes PostgreSQL/PostGIS est effective.
nb : A noter que chaque utilisateur dispose de Privilèges qui sont indiqués. C'est l'administrateur de la base de données qui règles les droits et rôles.
Un utilisateur doit pourvoir au minimum 'accéder aux objets', un producteur doit pouvoir 'créer de nouveaux objets'.
Cliquer sur le schéma utilisé ici « public » puis sur le nom du fichier souhaité : ici « route_xy »
La fenêtre suivante apparaît indiquant tous les champs attributaires de cette table PostgreSQL/PostGIS.
On peut cliquer sur l'onglet 'Table' pour faire apparaître la table avec ses champs et ses valeurs, ou 'Aperçu' pour avoir un aperçu de la géométrie.
On se propose de sélectionner tous les tronçons de route de la table route_xy dont le champ numero comprend la valeur D104.
La requête est : SELECT * FROM route_xy where numero = 'D104'
Après avoir cliqué sur le bouton Exécuter (F5), la liste des enregistrements de la table correspondant à la requête apparaît dans la partie Résultat de la fenêtre.
En cochant la case Charger en tant que nouvelle couche, on peut afficher dans QGIS les données résultant de la requête.
Il faut désigner obligatoirement la colonne avec des valeurs entières et uniques (identifiant) et la colonne géométrique.
La colonne Géométrique peut être trouvée dans l'onglet info de la table sous DBManager ou l'on voit que le champ 37 est de type geometry(LineString, 2154). La colonne avec des 'valeurs entières et uniques' est donnée par la rubrique Constraint dans le même onglet, il s'agit de la colonne gid.
Si nous n'avions pas disposé d'un identifiant de type INTEGER on aurait pu le créer en modifiant la requête SQL :
SELECT row_number() over() as ident, * FROM "ROUTE_XY" where "Numero" = 'D104'
L'info-bulle de la couche résultante dans QGIS après chargement indique la source :
table ="(SELECT * FROM \"ROUTE_XY\" where \"Numero\" = 'D104'