QGIS mengembalikan pesan "Lapisan Tidak Valid" ketika mencoba menambahkan tampilan PostGIS?

14

Saya baru mengenal Postgis dan QGIS. Saya membuat tampilan yang didefinisikan sebagai

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;

dalam PostgreSQL. Mencoba menambahkan tampilan ini ke QGIS mengembalikan kesalahan berikut ...

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

Tidak yakin apa masalahnya. Tabel disebutkan dalam geommetry_columnstabel di PostGIS, tetapi saya bisa melihat entri pesan di QGIS yang mengatakan "Tidak ada bidang kunci untuk tampilan yang diberikan". Saya menggunakan PostgreSQL 9.2 dan QGIS 1.8.0.

ufeliciano
sumber
1
Masalahnya tampaknya terkait dengan bidang kunci unik, Anda harus memilikinya. Saya tidak tahu data Anda, mungkin Anda bisa menjelaskan sedikit lebih banyak tentang apa yang ingin Anda capai dengan kueri Anda. Bagaimana Anda membuka Layer di QGIS? Apakah Anda memilih kunci? Dari apa yang Anda jelaskan, hanya s.code yang dapat digunakan sebagai kunci unik. Juga, geometri municipio Anda akan diulang beberapa kali untuk setiap siswa, apakah itu yang Anda inginkan?
Alexandre Neto

Jawaban:

6

Ketika Anda menambahkan tampilan dari PostGIS ke QGIS Anda harus menentukan bidang ID unik. Di sebelah kanan nama layer akan menjadi drop down di mana Anda dapat menentukan bidang mana yang akan digunakan. Jika Anda tidak memiliki bidang ID unik, Anda bisa membuat bidang ID palsu menggunakan fungsi jendela row_number () dalam kueri yang membuat tampilan Anda.

HeyOverThere
sumber
Pertanyaan ini terkait dan memberikan lebih banyak detail dalam memilih bidang ID unik Anda di gui QGIS.
RyanKDalton
Dan pertanyaan ini akan memberi Anda detail lebih lanjut tentang cara membuat tampilan dengan id unik.
RyanKDalton
Terima kasih atas balasannya. Masalah dipecahkan menggunakan fungsi yang disarankan.
ufeliciano
1

Hari ini saya menemukan kesalahan ini dengan tampilan yang dibuat dari gabungan antara tabel. Akhirnya memiliki dua bidang unik yang mengganggu QGis. Awalnya tampilan seperti:

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

Dengan cara ini ada dua bidang kunci utama dalam tampilan. Alih-alih, saya harus menentukan bidang yang dihasilkan, untuk mendapatkan kandidat bidang tunggal untuk pengidentifikasi unik:

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;
Luís de Sousa
sumber