QGIS gibt beim Versuch, eine PostGIS-Ansicht hinzuzufügen, die Meldung "Ungültiger Layer" zurück?

14

Ich bin neu bei Postgis und QGIS. Ich habe eine Ansicht erstellt, die als definiert ist

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;

in PostgreSQL. Beim Versuch, diese Ansicht zu QGIS hinzuzufügen, wird der folgende Fehler zurückgegeben ...

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

Nicht sicher, was das Problem ist. Die Tabelle wird in der geommetry_columnsTabelle in PostGIS erwähnt, aber in QGIS wird ein Nachrichteneintrag mit der Meldung "Kein Schlüsselfeld für die angegebene Ansicht" angezeigt. Ich benutze PostgreSQL 9.2 und QGIS 1.8.0.

ufeliciano
quelle
1
Das Problem hängt anscheinend mit dem eindeutigen Schlüsselfeld zusammen. Sie müssen eines haben. Ich kenne Ihre Daten nicht. Vielleicht können Sie etwas genauer erläutern, was Sie mit Ihrer Abfrage erreichen möchten. Wie öffnest du die Ebene in QGIS? Hast du einen Schlüssel gewählt? Von dem, was Sie beschrieben haben, kann nur am Code als eindeutiger Schlüssel verwendet werden. Außerdem werden Ihre Municipio-Geometrien für jeden Schüler mehrmals wiederholt. Ist es das, was Sie wollen?
Alexandre Neto

Antworten:

6

Wenn Sie eine Ansicht von PostGIS zu QGIS hinzufügen, müssen Sie das eindeutige ID-Feld angeben. Rechts neben dem Ebenennamen befindet sich ein Dropdown-Menü, in dem Sie angeben können, welches Feld verwendet werden soll. Wenn Sie kein eindeutiges ID-Feld haben, können Sie mit der Fensterfunktion row_number () in der Abfrage, die Ihre Ansicht erstellt, ein falsches ID-Feld erstellen.

HeyOverThere
quelle
Diese Frage ist verwandt und enthält weitere Informationen zur Auswahl Ihres eindeutigen ID-Felds in der QGIS-Benutzeroberfläche.
RyanKDalton-OffTheGridMaps
In dieser Frage erfahren Sie, wie Sie eine Ansicht mit einer eindeutigen ID erstellen.
RyanKDalton-OffTheGridMaps
Vielen Dank für die Antworten. Problem mit der vorgeschlagenen Funktion gelöst.
Ufeliciano
1

Heute bin ich auf diesen Fehler mit einer Ansicht gestoßen, die aus einem Join zwischen Tabellen erstellt wurde. Es endete mit zwei einzigartigen Feldern, die QGis verärgerten. Anfangs sah die Aussicht so aus:

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

Auf diese Weise befanden sich zwei Primärschlüsselfelder in der Ansicht. Stattdessen musste ich die resultierenden Felder angeben, um einen einzelnen Feldkandidaten für eine eindeutige Kennung zu erhalten:

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
quelle