QGIS restituisce il messaggio "Livello non valido" quando si tenta di aggiungere la vista PostGIS?


14

Sono nuovo di Postgis e QGIS. Ho creato una vista definita come

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. Il tentativo di aggiungere questa vista a QGIS restituisce il seguente errore ...

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

Non sono sicuro di quale sia il problema. La tabella è menzionata nella geommetry_columnstabella in PostGIS, ma posso vedere una voce di messaggio in QGIS che dice "Nessun campo chiave per la vista data". Sto usando PostgreSQL 9.2 e QGIS 1.8.0.


1
Il problema sembra essere correlato al campo chiave univoco, devi averne uno. Non conosco i tuoi dati, forse potresti spiegare qualcosa in più su ciò che vuoi ottenere con la tua query. Come stai aprendo il livello in QGIS? Hai scelto una chiave? Da quello che hai descritto, solo s.code può essere usato come chiave univoca. Inoltre, le tue geometrie municipio saranno ripetute più volte per ogni studente, è quello che vuoi?
Alexandre Neto,

Risposte:


6

Quando aggiungi una vista da PostGIS a QGIS devi specificare il campo ID univoco. A destra del nome del livello verrà visualizzato un menu a discesa in cui è possibile specificare quale campo utilizzare. Se non si dispone di un campo ID univoco, è possibile creare un campo ID falso utilizzando la funzione della finestra row_number () nella query che crea la vista.


Questa domanda è correlata e fornisce maggiori dettagli sulla selezione del campo ID univoco nella GUI di QGIS.
RyanKDalton,

E questa domanda ti fornirà maggiori dettagli su come creare una vista con un ID univoco.
RyanKDalton,

Grazie a tutti per le risposte. Problema risolto utilizzando la funzione suggerita.
ufeliciano,

1

Oggi ho riscontrato questo errore con una vista creata da un join tra le tabelle. Ha finito per avere due campi unici che hanno turbato QGis. Inizialmente la vista era come:

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

In questo modo c'erano due campi chiave principali nella vista. Invece, ho dovuto specificare i campi risultanti, al fine di finire un candidato campo singolo per identificatore univoco:

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;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.