QGIS возвращает сообщение «Invalid Layer» при попытке добавить представление 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.

ufeliciano
источник
1
Кажется, проблема связана с уникальным ключевым полем, оно должно быть. Я не знаю ваших данных, возможно, вы могли бы объяснить немного больше о том, чего вы хотите достичь с помощью своего запроса. Как вы открываете слой в QGIS? Вы выбрали ключ? Из того, что вы описали, только s.code можно использовать как уникальный ключ. Кроме того, геометрия вашего муниципалитета будет повторяться несколько раз для каждого студента, это то, что вы хотите?
Александр Нето

Ответы:

6

Когда вы добавляете представление из PostGIS в QGIS, вы должны указать поле уникального идентификатора. Справа от имени слоя будет раскрывающийся список, в котором можно указать, какое поле использовать. Если у вас нет поля уникального идентификатора, вы можете создать поле поддельного идентификатора, используя оконную функцию row_number () в запросе, который создает ваше представление.

HeyOverThere
источник
Этот вопрос связан с более подробной информацией о выборе поля уникального идентификатора в графическом интерфейсе QGIS.
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;
Луис де Соуза
источник