尝试添加PostGIS视图时,QGIS返回“无效层”消息吗?


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用作唯一键。而且,您的unicipio几何形状将对每个学生重复几次,这就是您想要的吗?
Alexandre Neto 2013年

Answers:


6

从PostGIS向QGIS添加视图时,必须指定唯一的ID字段。图层名称右侧的右边是一个下拉菜单,您可以在其中指定要使用的字段。如果没有唯一的ID字段,则可以在创建视图的查询中使用row_number()窗口函数创建伪造的ID字段。


这个问题是相关的,并提供了有关在QGIS gui中选择唯一ID字段的更多详细信息。
RyanKDalton 2013年

这个问题会给你如何创建一个唯一的ID视图的更多细节。
RyanKDalton 2013年

谢谢大家的答复。使用建议的功能解决了问题。
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;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.