PostGIS में क्या एक यूनिक आईडी के साथ व्यू बनाना संभव है?


24

जब मैं PostGIS में एक दृश्य बनाता हूं तो क्या उस दृश्य में एक विशिष्ट आईडी जोड़ने का कोई तरीका है? किसी भी अन्य PostGIS तालिका में "gid" फ़ील्ड की तरह?

संपादित करें: क्षमा करें, मुझे इसे मूल पोस्ट में शामिल करना चाहिए था। मैं PostGresql 9.0 और PostGIS 1.5 का उपयोग कर रहा हूं।

Ando

जवाबों:


29

आपको अपने विचार में एक पंक्ति के रूप में row_number () फ़ंक्शन का उपयोग करने में सक्षम होना चाहिए। यह Postgres 8.4 या उच्चतर के लिए काम करता है।

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

यह SQL Server, Oracle, और MySQL सहित अधिकांश डेटाबेस में काम करना चाहिए।


कूल - मैं इसे पहले दे दूंगा और आपके पास वापस आऊंगा।
एंडो

3
आप स्तंभ के row_number() OVER() AS "id"बिना भी कर सकते हैं ORDER
फाल्सीबैबर

यह आमतौर पर एक बहुत ही खराब डिजाइन निर्णय है, जैसा row_numberकि प्रभावी रूप से एक यादृच्छिक मूल्य है। आप इस पर निर्भर नहीं रह सकते हैं SELECT, विशेषकर जब अंतर्निहित डेटा में परिवर्तन होता है।
jpmc26

@jpmc - इसकी प्रकृति से एक दृश्य बदल जाएगा यदि इसका अंतर्निहित डेटा बदलता है। एक विश्वसनीय आईडी प्रश्न आवश्यकताओं का हिस्सा नहीं है। कुछ जीआईएस को केवल प्रत्येक सुविधा के लिए एक अद्वितीय आईडी की आवश्यकता होती है ताकि परत को लोड किया जा सके (जैसे आर्कपैम)।
geographika

मैं असंगत ID के साथ ठीक से कार्य करने के लिए ArcMap पर भरोसा नहीं करूंगा। आपको कैसे पता चलेगा कि जब आप पैन करते हैं तो डेटाबेस की आवश्यकता नहीं होती है लेकिन विशेषता तालिका को ताज़ा नहीं करते हैं? तब आपके पास सुविधाओं का चयन करने का प्रयास करने वाला एक बेमेल होगा।
jpmc26

5

PostgreSQL के पुराने संस्करणों (<= 8.3) के लिए, यहां एक और समाधान है। इस उदाहरण में, मैं vid"व्यू आईडी" के लिए एक और कॉलम नाम का उपयोग करता हूं ।

सबसे पहले, एक अनुक्रम बनाएँ। उपयोग करें CYCLEताकि यह अनुक्रम के अंत तक पहुंचने की स्थिति में लूप हो जाए।

CREATE SEQUENCE myview_vid_seq CYCLE;

अब, अनुक्रम का उपयोग करने वाला एक दृश्य बनाएं:

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

इन सुझावों को आजमाने के लिए मैं काम पर वापस नहीं गया। लेकिन आपने जो समाधान सुझाया है, वह केवल पोस्टग्रैस्कल संस्करणों के लिए <= 8.3 है? मैं Postresql 9.0 और PostGIS 1.5 चला रहा हूं।
एंडो

1
आपके सिस्टम के लिए, इस और जियोग्राफिका के उत्तर दोनों को काम करना चाहिए। यह देखना एक अच्छा प्रदर्शन परीक्षण होगा कि कौन सा तेज है। मुझे QGIS में डेटा देखने के लिए आपके प्रश्न में जो करना है, वह मुझे करना था, इसलिए मैं अनुमान लगा रहा हूं कि आप एक समान स्थिति में हैं।
माइक टी।

1
पहचान की स्थिति मैं कहूंगा - कुछ परतों को एक दृश्य में संयोजित करने की कोशिश करना और QGIS के लिए एक अद्वितीय आईडी की आवश्यकता है।
एंडो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.