QGIS trả về tin nhắn lớp không hợp lệ của Hồi giáo khi cố gắng thêm chế độ xem PostGIS?


14

Tôi mới biết đến Postgis và QGIS. Tôi đã tạo một khung nhìn được xác định là

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;

trong PostgreSQL. Cố gắng thêm chế độ xem này vào QGIS sẽ trả về lỗi sau ...

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

Không chắc vấn đề là gì. Bảng được đề cập trong geommetry_columnsbảng trong PostGIS, nhưng tôi có thể thấy một mục thông báo trong QGIS có nội dung "Không có trường chính nào cho chế độ xem đã cho". Tôi đang sử dụng PostgreSQL 9.2 và QGIS 1.8.0.


1
Vấn đề dường như liên quan đến trường khóa duy nhất, bạn phải có một. Tôi không biết dữ liệu của bạn, có lẽ bạn có thể giải thích thêm một chút về những gì bạn muốn đạt được với truy vấn của mình. Làm thế nào bạn mở Layer trong QGIS? Bạn đã chọn một chìa khóa? Từ những gì bạn mô tả, chỉ s.code có thể được sử dụng làm khóa duy nhất. Ngoài ra, hình học đô thị của bạn sẽ được lặp lại nhiều lần cho mỗi học sinh, đó có phải là điều bạn muốn?
Alexandre Neto

Câu trả lời:


6

Khi bạn thêm chế độ xem từ PostGIS vào QGIS, bạn phải chỉ định trường ID duy nhất. Tắt ở bên phải của tên lớp sẽ là một thả xuống nơi bạn có thể chỉ định trường nào sẽ sử dụng. Nếu bạn không có trường ID duy nhất, bạn có thể tạo trường ID giả bằng cách sử dụng hàm cửa sổ row_number () trong truy vấn tạo chế độ xem của bạn.


Câu hỏi này có liên quan và cung cấp thêm chi tiết về việc chọn trường ID duy nhất của bạn trong gui của QGIS.
RyanKDalton-OffTheGridMaps

câu hỏi này sẽ cung cấp cho bạn thêm chi tiết về cách tạo chế độ xem với id duy nhất.
RyanKDalton-OffTheGridMaps

Cảm ơn tất cả các bài trả lời. Vấn đề được giải quyết bằng cách sử dụng chức năng được đề xuất.
ufeliciano

1

Hôm nay tôi đã gặp phải lỗi này với một khung nhìn được tạo từ phép nối giữa các bảng. Nó đã kết thúc có hai lĩnh vực độc đáo làm đảo lộn QGis. Ban đầu quan điểm là như sau:

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

Bằng cách này, có hai trường chính trong chế độ xem. Thay vào đó, tôi phải chỉ định các trường kết quả, để kết thúc một ứng cử viên trường duy nhất cho mã định danh duy nhất:

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;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.