QGIS, PostGIS görünümü eklemeye çalışırken “Geçersiz Katman” mesajı döndürüyor mu?


14

Postgis ve QGIS'te yeniyim. Olarak tanımlanan bir görünüm oluşturdum

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 içinde. Bu görünümü QGIS'ye eklemeye çalışmak aşağıdaki hatayı döndürür ...

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

Sorunun ne olduğundan emin değilim. Tablo geommetry_columnsPostGIS'deki tabloda belirtilmiştir , ancak QGIS'te "Verilen görünüm için anahtar alan yok" yazan bir mesaj girişi görebiliyorum. PostgreSQL 9.2 ve QGIS 1.8.0 kullanıyorum.


1
Sorun benzersiz anahtar alanıyla ilgili gibi görünüyor, bir tane olmalı. Verilerinizi bilmiyorum, belki sorgunuzla elde etmek istediğiniz şey hakkında biraz daha açıklayabilirsiniz. QGIS'de katmanı nasıl açıyorsunuz? Bir anahtar seçtiniz mi? Açıkladığınızdan, sadece s.code benzersiz anahtar olarak kullanılabilir. Ayrıca, belediye geometrileriniz her öğrenci için birkaç kez tekrarlanacak, istediğiniz şey bu mu?
Alexandre Neto

Yanıtlar:


6

PostGIS'ten QGIS'e bir görünüm eklediğinizde, benzersiz kimlik alanını belirtmeniz gerekir. Katman adının sağındaki kapalı, kullanılacak alanı belirtebileceğiniz bir açılır menü olacaktır. Benzersiz bir kimlik alanınız yoksa, görünümünüzü oluşturan sorgudaki row_number () pencere işlevini kullanarak sahte bir kimlik alanı oluşturabilirsiniz.


Bu soru ilişkilidir ve QGIS GUI'sindeki benzersiz kimlik alanınızı seçme konusunda daha ayrıntılı bilgi verir.
RyanKDalton

Ve bu soru size benzersiz bir kimliğe sahip bir görünüm oluşturma hakkında daha fazla ayrıntı verecektir.
RyanKDalton

Cevaplar için teşekkürler. Önerilen işlev kullanılarak sorun çözüldü.
ufeliciano

1

Bugün tablolar arasındaki bir birleşmeden oluşturulan bir görünümle bu hatayla karşılaştım. Sonunda QGis'i üzen iki benzersiz alan vardı. Başlangıçta manzara şöyleydi:

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

Bu şekilde görünümde iki ana anahtar alan vardı. Bunun yerine, benzersiz tanımlayıcı için tek bir alan adayı elde etmek için ortaya çıkan alanları belirtmek zorunda kaldım:

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;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.