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


1
ปัญหาดูเหมือนจะเกี่ยวข้องกับเขตข้อมูลคีย์ที่ไม่ซ้ำกันคุณจะต้องมีหนึ่ง ฉันไม่ทราบข้อมูลของคุณบางทีคุณอาจอธิบายเพิ่มเติมเกี่ยวกับสิ่งที่คุณต้องการให้บรรลุด้วยการสืบค้นของคุณ คุณเปิด Layer ใน QGIS ได้อย่างไร คุณเลือกรหัสหรือไม่ จากสิ่งที่คุณอธิบายมีเพียง s.code เท่านั้นที่สามารถใช้เป็นคีย์เฉพาะ นอกจากนี้รูปทรง municipio ของคุณจะถูกทำซ้ำหลายครั้งสำหรับนักเรียนแต่ละคนนั่นคือสิ่งที่คุณต้องการ?
Alexandre Neto

คำตอบ:


6

เมื่อคุณเพิ่มมุมมองจาก PostGIS เป็น QGIS คุณจะต้องระบุฟิลด์ ID ที่ไม่ซ้ำกัน ออกไปทางด้านขวาของชื่อเลเยอร์จะเป็นการดรอปดาวน์ที่คุณสามารถระบุฟิลด์ที่จะใช้ หากคุณไม่มีฟิลด์ ID ที่ไม่ซ้ำกันคุณสามารถสร้างฟิลด์ ID ปลอมโดยใช้ฟังก์ชั่นหน้าต่าง row_number () ในแบบสอบถามที่สร้างมุมมองของคุณ


คำถามนี้เกี่ยวข้องและให้รายละเอียดเพิ่มเติมเกี่ยวกับการเลือกฟิลด์ ID เฉพาะของคุณใน QGIS gui
RyanKDalton

และคำถามนี้จะให้รายละเอียดเพิ่มเติมเกี่ยวกับวิธีสร้างมุมมองด้วยรหัสเฉพาะ
RyanKDalton

ขอบคุณทุกคำตอบ แก้ไขปัญหาโดยใช้ฟังก์ชั่นที่แนะนำ
ufeliciano

1

วันนี้ฉันชนเข้ากับข้อผิดพลาดนี้ด้วยมุมมองที่สร้างขึ้นจากการเข้าร่วมระหว่างตาราง มันจบลงด้วยการมีสองช่องที่ไม่เหมือนใคร ในขั้นต้นมุมมองเป็นเช่น:

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;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.