QGIS devuelve el mensaje "Capa inválida" cuando intenta agregar la vista PostGIS?

14

Soy nuevo en Postgis y QGIS. Creé una vista definida como

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;

en PostgreSQL. Intentar agregar esta vista a QGIS devuelve el siguiente error ...

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

No estoy seguro de cual es el problema. La tabla se menciona en la geommetry_columnstabla en PostGIS, pero puedo ver una entrada de mensaje en QGIS que dice "Sin campo clave para la vista dada". Estoy usando PostgreSQL 9.2 y QGIS 1.8.0.

ufeliciano
fuente
1
El problema parece estar relacionado con el campo clave único, debe tener uno. No conozco sus datos, tal vez podría explicar un poco más sobre lo que desea lograr con su consulta. ¿Cómo abres la capa en QGIS? ¿Elegiste una llave? Por lo que describió, solo s.code se puede usar como clave única. Además, las geometrías de tu municipio se repetirán varias veces para cada estudiante, ¿es eso lo que quieres?
Alexandre Neto

Respuestas:

6

Cuando agrega una vista de PostGIS a QGIS, debe especificar el campo de ID único. A la derecha del nombre de la capa, aparecerá un menú desplegable donde puede especificar qué campo usar. Si no tiene un campo de ID único, puede crear un campo de ID falso utilizando la función de ventana row_number () en la consulta que crea su vista.

HeyOverThere
fuente
Esta pregunta está relacionada y brinda más detalles sobre cómo seleccionar su campo de ID único en la interfaz gráfica de usuario de QGIS.
RyanKDalton
Y esta pregunta le dará más detalles sobre cómo crear una vista con una identificación única.
RyanKDalton
Gracias a todos por las respuestas. Problema resuelto usando la función sugerida.
ufeliciano
1

Hoy me topé con este error con una vista que se creó a partir de una unión entre tablas. Terminó teniendo dos campos únicos que alteraron QGis. Inicialmente, la vista era como:

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

De esta manera, había dos campos clave principales en la vista. En cambio, tuve que especificar los campos resultantes, para terminar con un candidato de campo único para un identificador único:

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
fuente