PostgreSQL में एक दृश्य के लिए क्रिएट व्यू कोड कैसे देखें?


173

क्या PostgreSQL कमांड-लाइन क्लाइंट का उपयोग करके एक दृश्य बनाने के लिए उपयोग किए गए कोड को देखने का एक आसान तरीका है?

SHOW CREATE VIEWMySQL से कुछ इस तरह ।

जवाबों:


229

यहाँ लौटने के लिए वापस जाने के लिए रखा pg_get_viewdef(कैसे याद रखना है कि !!), तो एक और अधिक यादगार आदेश के लिए खोज की ... और मिल गया:

\d+ viewname

आप \?pgsql कमांड लाइन पर टाइप करके कमांड्स के समान प्रकार देख सकते हैं ।

बोनस टिप: एमएसीएस कमांड sql-postgrespgsql को बहुत अधिक सुखद बनाता है (संपादित करें, कॉपी, पेस्ट, कमांड इतिहास)।


1
मैं आमतौर पर इस ट्रिक को \ o कमांड के साथ जोड़ देता हूं। मैं कुछ फ़ाइलों को डंप करता हूँ, फिर विम मैक्रो का उपयोग करके मैंने अपनी ज़रूरतों को पूरा करने के लिए उन फ़ाइलों को संशोधित किया।
ब्रेन 90

दुख की बात है: यह psql के बिना इस्तेमाल नहीं किया जा सकता है। "शुद्ध" SQL- कमांड-संस्करण (बिना pg_get_viewdef का सहारा लिए) कर सकते हैं, जो कि अधिक पोर्टेबल है, उदाहरण के लिए DBI के साथ पर्ल।
जिंक

1
क्या अधिक उपयोगी होगा, कार्य के लिए \ ef कमांड के कुछ बदलावों के साथ सीधे व्यू कोड को संपादित करने में सक्षम होना चाहिए, जैसे कि फ़ंक्शन के लिए \ ef। A \ ev सुविधा अच्छी होगी। अब तक @ ब्रेन 90 द्वारा सुझाए गए समाधान मैं निकटतम संपादन दृश्य परिभाषाओं में पाया गया है।
थालिस के।

1
संबंधित टिप: \dvसभी विचारों को सूचीबद्ध करता है
नाथन लॉन्ग

120
select pg_get_viewdef('viewname', true)

उन सभी कार्यों की एक सूची मैनुअल में उपलब्ध है:

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


शांत, यह भी सुंदर यह प्रिंट! :) मैनुअल का कहना है कि यह पदावनत है, हालांकि ... :( धन्यवाद!
एलियास डोर्नेलेस

8
@ वेलियास: केवल उस संस्करण का उपयोग करें जो एक ओआईडी का उपयोग करके नाम को एक select pg_get_viewdef('viewname'::regclass, true)
ओड

2
@ जेल कास्टिंग के विकल्प के रूप में, यह भी काम करता है: SELECT pg_get_viewdef(to_regclass('viewname'))(कम से कम v9.4 की आवश्यकता है)।
पानी

49
select definition from pg_views where viewname = 'my_view'

1
इस एक के लिए धन्यवाद .. यह केवल psql- ग्राहक से मेरे कार्यक्रम से दृश्य परिभाषा का उपयोग करने की अनुमति देता है।
डॉमिनिक डोर्न

2
इसमें अतिरिक्त लाभ यह है कि यह अमेज़न रेडशिफ्ट के लिए भी काम करता है।
ब्रेंट राइट्स कोड

यह उन स्कीमा में विचारों के लिए काम नहीं करता है जो खोज पथ पर नहीं हैं। और यह अलग-अलग स्कीमा में एक ही नाम के दो विचारों के बीच अंतर नहीं करता है। जब मैं स्कीमा लिखता हूं, तो मैं उस नामस्थान का उल्लेख कर रहा हूं जो आप क्रिएट स्कीमा के साथ बनाते हैं
माइकल डिलन

1
@MichaelDillon चुनिंदा परिभाषा के बजाय एक चयन * करें, और आप यह देख पाएंगे कि कुछ अन्य informations सहित, स्कीमा क्या है।
एंडर्स क्रेइनो

यदि आपका दृश्य खोज पथ पर नहीं है, तो उपयोग करेंselect definition from pg_views where schemaname = 'my_schema' and viewname = 'my_view'
bonh

18

यदि आप ANSI SQL-92 संस्करण चाहते हैं:

select view_definition from information_schema.views where table_name = 'view_name';

8

V.9.6 और इसके बाद के संस्करण से GoodNews, देखें संपादन अब psql के मूल निवासी हैं। बस \evकमांड इनवॉइस । देखें परिभाषाएँ आपके कॉन्फ़िगर किए गए संपादक में दिखाई देंगी।

julian@assange=# \ev {your_view_names}

बक्शीश। क्वेरी बफर के साथ बातचीत करने के लिए कुछ उपयोगी कमांड।

Query Buffer
  \e [FILE] [LINE]       edit the query buffer (or file) with external editor
  \ef [FUNCNAME [LINE]]  edit function definition with external editor
  \ev [VIEWNAME [LINE]]  edit view definition with external editor
  \p                     show the contents of the query buffer
  \r                     reset (clear) the query buffer
  \s [FILE]              display history or save it to file
  \w FILE                write query buffer to file

4
हाहा, बस उसे सलाम करने के लिए। उसने शुरुआती दिनों में बहुत कुछ किया। git.postgresql.org/gitweb/…
Brain90

3

यह इंगित करने के लिए एक छोटी सी बात है।
फ़ंक्शन का उपयोग करके pg_get_viewdef या pg_views या information_schema.views आपको हमेशा अपने मूल DDL का पुनर्लेखन संस्करण मिलेगा
आपके ओरिजिनल डीडीएल स्क्रिप्ट की तरह ही रिवाइज्ड वर्जन हो सकता है या नहीं।

यदि नियम प्रबंधक आपके विचार को फिर से लिखता है तो आपकी मूल DLL खो जाएगी और आप अपने दृश्य परिभाषा के केवल पुनर्लेखन संस्करण को पढ़ पाएंगे।
सभी विचारों को फिर से नहीं लिखा जाता है, लेकिन यदि आप उप-चयन या जॉइन का उपयोग करते हैं, तो शायद आपके विचारों को फिर से लिखा जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.