QGIS повертає повідомлення "Недійсний шар" при спробі додати перегляд PostGIS?


14

Я новачок у Postgis та QGIS. Я створив подання, визначене як

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;

в PostgreSQL. При спробі додати цей погляд до QGIS повертається така помилка ...

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

Не впевнений, у чому проблема. Таблиця згадується в geommetry_columnsтаблиці в PostGIS, але я бачу запис у QGIS, що говорить "Немає ключового поля для заданого перегляду". Я використовую PostgreSQL 9.2 та QGIS 1.8.0.


1
Здається, проблема пов'язана з унікальним ключовим полем, у вас має бути таке. Я не знаю ваших даних, можливо, ви могли б пояснити трохи більше про те, чого ви хочете досягти своїм запитом. Як ви відкриваєте шар в QGIS? Ви вибрали ключ? З того, що ви описали, тільки s.code можна використовувати як унікальний ключ. Крім того, ваші геометрики муніципалітету будуть повторюватися кілька разів для кожного учня, це те, що ви хочете?
Олександр Нето

Відповіді:


6

Коли ви додаєте подання від PostGIS до QGIS, вам слід вказати унікальне поле ідентифікатора. Праворуч від назви шару буде випадаюче меню, де ви можете вказати, яке поле використовувати. Якщо у вас немає унікального поля ідентифікатора, ви можете створити підроблене поле ідентифікатора за допомогою функції вікна row_number () у запиті, який створює ваш погляд.


Це питання пов'язане і дає більш детальну інформацію про вибір вашого унікального поля ідентифікатора в QGIS gui.
RyanKDalton

І це запитання дасть вам докладнішу інформацію про те, як створити представлення даних з унікальним ідентифікатором.
RyanKDalton

Дякую всім за відповіді. Проблема вирішена за допомогою запропонованої функції.
ufeliciano

1

Сьогодні я зіткнувся з цією помилкою з видом, який створюється завдяки з'єднанню між таблицями. У результаті з'явилися два унікальних поля, які засмутили QGis. Спочатку вид виглядав так:

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

Таким чином у поданні було два поля первинного ключа. Натомість мені довелося вказати результуючі поля, щоб в кінцевому підсумку отримати єдиного кандидата в поле для унікального ідентифікатора:

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;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.