QGIS renvoie le message «Invalid Layer» lors de la tentative d'ajout de la vue PostGIS?

14

Je suis nouveau sur Postgis et QGIS. J'ai créé une vue définie comme

CREATE OR REPLACE VIEW pupr.vstudentmuni AS 
 SELECT m.id AS munid, m.name AS muname, m.geom, s.code, 
    (s.name::text || ' '::text) || s.lastname::text AS fullname
   FROM pupr.municipio m, pupr.student_location l, pupr.student s
  WHERE st_within(l.geom, m.geom) AND s.code = l.code;

dans PostgreSQL. Essayer d'ajouter cette vue à QGIS renvoie l'erreur suivante ...

"Invalid layer"..."sql= is an invalid layer and cannot be loaded."

Je ne sais pas quel est le problème. Le tableau est mentionné dans le geommetry_columnstableau de PostGIS, mais je peux voir une entrée de message dans QGIS qui dit "Aucun champ clé pour une vue donnée". J'utilise PostgreSQL 9.2 et QGIS 1.8.0.

ufeliciano
la source
1
Le problème semble être lié au champ clé unique, vous devez en avoir un. Je ne connais pas vos données, peut-être pourriez-vous expliquer un peu plus ce que vous voulez réaliser avec votre requête. Comment ouvrez-vous la couche dans QGIS? Avez-vous choisi une clé? D'après ce que vous avez décrit, seul s.code peut être utilisé comme clé unique. Aussi, vos géométries municipio seront répétées plusieurs fois pour chaque élève, c'est ce que vous voulez?
Alexandre Neto

Réponses:

6

Lorsque vous ajoutez une vue de PostGIS à QGIS, vous devez spécifier le champ ID unique. À droite du nom du calque, une liste déroulante vous permet de spécifier le champ à utiliser. Si vous n'avez pas de champ ID unique, vous pouvez créer un faux champ ID à l'aide de la fonction de fenêtre row_number () dans la requête qui crée votre vue.

HeyOverThere
la source
Cette question est liée et donne plus de détails sur la sélection de votre champ ID unique dans l'interface graphique QGIS.
RyanKDalton
Et cette question vous donnera plus de détails sur la façon de créer une vue avec un identifiant unique.
RyanKDalton
Merci à tous pour les réponses. Problème résolu en utilisant la fonction suggérée.
ufeliciano du
1

Aujourd'hui, je suis tombé sur cette erreur avec une vue créée à partir d'une jointure entre des tables. Il a fini par avoir deux champs uniques qui ont bouleversé QGis. Au départ, la vue était comme:

CREATE OR REPLACE VIEW my_view AS
SELECT *
  FROM more_data m,
       node n   
 WHERE m.id_node = n.id;

De cette façon, il y avait deux champs de clé primaire dans la vue. Au lieu de cela, j'ai dû spécifier les champs résultants, afin de finir par un candidat de champ unique pour l'identifiant unique:

CREATE OR REPLACE VIEW my_view AS
SELECT n.id,
       n.name,
       n.geom,
       m.type,
       m.other_stuff,
       m.more_stuff
  FROM more_data m,
       node n   
 WHERE m.id_node = n.id;
Luís de Sousa
la source