PostGIS'te benzersiz bir kimliğe sahip bir Görünüm oluşturmak mümkün mü?


24

PostGIS’te bir görünüm oluştururken bu görünüme benzersiz bir kimlik eklemenin bir yolu var mı? Tıpkı herhangi bir PostGIS tablosundaki "gid" alanı gibi mi?

Düzenleme: Üzgünüm, bunu orijinal yazıya dahil etmeliydim. PostGresql 9.0 ve PostGIS 1.5 kullanıyorum.

Ando

Yanıtlar:


29

Row_number () işlevini görünümünüzde bir sütun olarak kullanabilmelisiniz. Bu Postgres 8.4 veya üstü için çalışıyor.

http://www.postgresql.org/docs/current/static/functions-window.html

SELECT * FROM
( SELECT
    ROW_NUMBER() OVER (ORDER BY column_to_sort_by ASC) AS ROW_NUMBER,
    Col1, Col2
  FROM table_name
) myview_name

Bu, SQL Server, Oracle ve MySQL dahil olmak üzere çoğu veritabanında çalışmalıdır.


Harika - Önce vereceğim ve sana geri döneceğim.
Ando

3
Ayrıca sütun üstü row_number() OVER() AS "id"olmadan da yapabilirsiniz ORDER
falcacibar

Bu, genellikle rastgele bir değer olduğu gibi , genellikle çok zayıf bir tasarım kararıdır row_number. SELECTÖzellikle altta yatan veriler değiştiğinde, s arasında tutarlı olmasına güvenemezsiniz .
jpmc26

@jpmc - doğası gereği, temel verileri değişirse görünüm değişecektir. Güvenilir bir kimlik, soru gereksinimlerinin bir parçası değildir. Bazı GIS'ler yalnızca katmanı yüklemek için her özellik için benzersiz bir kimlik gerektirir (örn. ArcMap).
coğrafya

ArcMap’in tutarsız bir kimlikle doğru şekilde çalışacağına güvenmem. Kaydırdığınızda ancak nitelik tablosunu yenilemeyince veritabanını gerektirmediğini nasıl biliyorsunuz? Öyleyse özellikleri seçmeye çalışan bir uyuşmazlık var.
jpmc26

5

PostgreSQL'in eski sürümleri için (<= 8.3), işte başka bir çözüm. Bu örnekte, vid"görünüm kimliği" için başka bir sütun adı kullanıyorum .

İlk önce bir dizi oluşturun. CYCLEDizinin sonuna ulaştığınızda dönecek şekilde kullanın .

CREATE SEQUENCE myview_vid_seq CYCLE;

Şimdi, diziyi kullanan bir GÖRÜNÜM oluşturun:

CREATE OR REPLACE VIEW myview AS 
 SELECT nextval('myview_vid_seq'::regclass) AS vid, mytable.*
 FROM mytable;

Bu önerileri henüz denemek için işe geri dönmedim. Ancak önerdiğiniz çözüm, yalnızca Postgresql sürümleri için <= 8.3? Postresql 9.0 ve PostGIS 1.5 kullanıyorum.
Ando

1
Sisteminiz için hem bunun hem de coğrafya'nın cevabı işe yaramalı. Hangisinin daha hızlı olduğunu görmek iyi bir performans testi olurdu. QGIS'deki verileri görüntülemek için sorunuzda sorduğunuz şeyi yapmak zorunda kaldım, bu yüzden benzer bir durumda olduğunuzu tahmin ediyorum.
Mike T,

1
Aynı durum - Söyleyeceğim birkaç katman bir görünümde birleştirilmeye çalışılıyor ve QGIS için benzersiz bir kimlik gerekiyor.
Ando
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.