QGIS zwraca komunikat „Nieprawidłowa warstwa” podczas próby dodania widoku PostGIS?

14

Jestem nowy w Postgis i QGIS. Utworzyłem widok zdefiniowany jako

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;

w PostgreSQL. Próba dodania tego widoku do QGIS zwraca następujący błąd ...

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

Nie jestem pewien na czym polega problem. Tabela jest wymieniona w geommetry_columnstabeli w PostGIS, ale widzę pozycję komunikatu w QGIS, która mówi „Brak pola klucza dla danego widoku”. Używam PostgreSQL 9.2 i QGIS 1.8.0.

ufeliciano
źródło
1
Problem wydaje się być związany z unikalnym polem klucza, musisz go mieć. Nie znam twoich danych, może mógłbyś wyjaśnić nieco więcej na temat tego, co chcesz osiągnąć za pomocą zapytania. Jak otwierasz warstwę w QGIS? Czy wybrałeś klucz? Z tego co opisałeś, tylko s.code może być użyty jako unikalny klucz. Również geometria municipio będzie powtarzana kilka razy dla każdego ucznia, czy tego właśnie chcesz?
Alexandre Neto

Odpowiedzi:

6

Kiedy dodajesz widok z PostGIS do QGIS, musisz określić unikalne pole ID. Po prawej stronie nazwy warstwy pojawi się menu rozwijane, w którym możesz określić, którego pola użyć. Jeśli nie masz unikalnego pola identyfikatora, możesz utworzyć fałszywe pole identyfikatora za pomocą funkcji okna row_number () w zapytaniu tworzącym widok.

HeyOverThere
źródło
To pytanie jest powiązane i zawiera więcej szczegółów na temat wybierania unikalnego pola identyfikatora w GUI QGIS.
RyanKDalton
I to pytanie daje więcej szczegółów na temat jak utworzyć widok z unikalnym identyfikatorem.
RyanKDalton
Dziękuję wszystkim za odpowiedzi. Problem rozwiązany za pomocą sugerowanej funkcji.
ufeliciano
1

Dzisiaj natknąłem się na ten błąd z widokiem, który został utworzony z połączenia między tabelami. Skończyło się to posiadaniem dwóch unikalnych pól, które zdenerwowały QGis. Początkowo widok wyglądał następująco:

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

W ten sposób w widoku były dwa pola klucza głównego. Zamiast tego musiałem określić pola wynikowe, aby uzyskać jedno pole kandydujące na unikalny identyfikator:

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
źródło