2012-03-25 20 views
15

मैं धीरे-धीरे एमएसएसएलएल से पोस्टग्रेएसक्यूएल में जा रहा हूं।PostgreSQL संग्रहीत प्रक्रिया को कैसे संपादित करें?

एमएसएसक्यूएल में मैं पहले से ही सहेजी गई प्रक्रिया या फ़ंक्शन के संपादन को कॉल कर सकता हूं, और प्रशासन खोल (SQL सर्वर प्रबंधन स्टूडियो) ने मुझे प्रक्रिया का पाठ दिखाया, इसलिए मुझे टेक्स्ट स्रोत में कहीं भी अपना स्रोत कोड स्टोर करने की आवश्यकता नहीं थी।

PostgreSQL के साथ सुविधाजनक तरीका कैसे करें? मैं pgAdmin III का उपयोग कर रहा हूँ।

+3

निष्पादित करने के लिए एक बाहरी फ़ाइल में अपने संग्रहीत प्रक्रिया भंडारण भूल नहीं है अत्यधिक वैसे भी (आदर्श एक संस्करण नियंत्रण प्रणाली में) की सिफारिश की है –

+0

@a_horse_with_no_name:। मैं एक अलग पसंद करते हैं दृष्टिकोण। मेरे पास प्रत्येक उत्पादक डीबी क्लस्टर (अक्सर कॉपी किया गया) के लिए एक परीक्षण डीबी क्लस्टर है जहां मैं प्रयोग करता हूं। जब अच्छा माना जाता है, तो मैं उत्पादक डीबी क्लस्टर में कार्यान्वित करता हूं। सामान्य बैकअप के अतिरिक्त मैं अक्सर स्कीमा-केवल बैकअप चलाता हूं, खासकर पहले/स्कीमा में परिवर्तन के बाद। पारंपरिक भंडार डेटाबेस स्कीमा के लिए सीमित उपयोग के हैं क्योंकि डेटा लगातार बदलता है और कई बदलावों को आसानी से नहीं बदला जा सकता है। –

+1

@ErwinBrandstetter: उस दृष्टिकोण के साथ समस्या यह है कि आप ओवरव खो देते हैं संस्करण x से संस्करण x + 1 तक डेटाबेस प्राप्त करने के लिए आपको कौन से परिवर्तनों को लागू करने की आवश्यकता है, देखें। आपको एक केंद्रीकृत स्थान की आवश्यकता है जहां प्रत्येक परिवर्तन को ट्रैक किया जा सके (और आदर्श रूप से एक मुद्दा टिकट के लिए मैप किया गया हो)। यदि आपके पास एक से अधिक पर्यावरण (विकास, परीक्षण, स्टेजिंग, सत्यापन, प्रतिगमन, पूर्व उत्पादन, उत्पादन) और शायद उत्पादन में एक से अधिक संस्करण (विभिन्न देशों को सोचें) हैं, तो मुझे नहीं लगता कि आप सभी का ट्रैक कैसे रख सकते हैं वीसीएस के बिना परिवर्तन। –

उत्तर

18

पोस्टग्रेज़ के आधिकारिक वितरण में 2 ग्राहक शामिल हैं - सीएलआई एक psql और एक जीयूआई pgAdmin। दोनों जो आप चाहते हैं उसका समर्थन करते हैं: psql के लिए यह \ef और pgAdmin के लिए - फ़ंक्शन, "गुण", "कोड" टैब पर राइट-क्लिक करें।

+1

'\ ef' कामों का उपयोग करने की टक्कर में नहीं है, लेकिन यह फ़ंक्शन को सहेज नहीं पाएगा? – redolent

+2

@redolent, आपको खुली फ़ाइल के अंत में मैन्युअल रूप से ';' जोड़ने की आवश्यकता हो सकती है, या केवल एक ';' जोड़ें और अगर आप पहले से ही संपादक को बंद कर चुके हैं तो एंटर दबाएं। – 10gistic

1

phpPgAdmin आपको अपनी संग्रहीत प्रक्रियाओं को संपादित करने और इंटरफ़ेस के भीतर संपादित करने देगा। संस्करण नियंत्रण के लिए उन्हें बाहरी रूप से संग्रहीत करने के बारे में आपके प्रश्न के तहत छोड़ी गई टिप्पणी की भी अत्यधिक अनुशंसा की जाती है।

3

pgAdmin में क्या आप इस विकल्प को सक्रिय करता है, तो आसान अपने जीवन बना सकते हैं:

फ़ाइल -> विकल्प .. -> क्वेरी उपकरण -> [x] कॉपी मुख्य रूप से SQL बातचीत करने के लिए एसक्यूएल

फिर, जो भी SQL फलक में प्रदर्शित होता है उसे एक नई खुली क्वेरी टूल विंडो में कॉपी किया जाएगा। तो, ऑब्जेक्ट ब्राउज़र में फ़ंक्शन का चयन करें और टूल बार में आवर्धक ग्लास आइकन पर क्लिक करें।

वर्तमान संस्करण 1.14.2 में एक खुली बग के बारे में जागरूक रहें। डिफ़ॉल्ट रूप से, public में EXECUTE फ़ंक्शंस पर विशेषाधिकार है। आप इस विशेषाधिकार को REVOKE कर सकते हैं - जो केवल SECURITY DEFINER फ़ंक्शंस के लिए उपयोगी है। लेकिन यह REVOKE पीजीएडमिन से रिवर्स इंजीनियर डीडीएल कथन में गायब है (एक एनयूएलएल एक खाली एसीएल के साथ भ्रमित हो गया है)। सावधान रहें यदि आप इस तरह के एक समारोह को हटाते हैं और फिर से बनाते हैं!

2

यह कोड संपादित करने और इसका परीक्षण करने का एक सुविधाजनक तरीका भी है।

1) pgAdmin से एक आवश्यक SQL फ़ंक्शन का कोड निकालें।

2) कोड को फ़ाइल.sql में रखें।

3) file.sql के साथ एक ही निर्देशिका में एक खोल/बल्ला फ़ाइल बनाएँ:

psql -U postgres dbname < file.sql 

4) एक तेजी से पैनल में खोल/बल्ला फ़ाइल के लिए एक शॉर्टकट रखें।

5) फ़ाइल को अपने पसंदीदा टेक्स्ट एडिटर के साथ संपादित करें और फ़ंक्शन को अपडेट करने के लिए शॉर्टकट दबाएं।

+0

आम तौर पर मुझे आपका योगदान उपयोगी लगता है, लेकिन इस विशिष्ट मामले में आपका सुझाव बिल्कुल सही है कि क्या नहीं करना चाहता था: "इसलिए मुझे टेक्स्ट स्रोत में कहीं भी अपना स्रोत कोड स्टोर नहीं करना पड़ा" - शायद क्योंकि वह सोचता है कि यह दृष्टिकोण "सुविधाजनक" कहलाए जाने के लिए बहुत जटिल है। – ChristophK

0

सही वस्तु पेड़ में समारोह पर क्लिक करें (बाईं ओर) -> स्क्रिप्ट -> स्क्रिप्ट बनाने

-या-

नई SQL क्वेरी निष्पादित करें -> "बनाने या बदलने की प्रतिलिपि कोड समारोह ..."करने के लिए इसे

फिर स्क्रिप्ट संपादित करें और इसे

संबंधित मुद्दे