PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL फ़ंक्शंस में भाषा sql और भाषा plpgsql के बीच अंतर

एसक्यूएल फ़ंक्शन

... बेहतर विकल्प हैं:

  • सरल अदिश प्रश्नों के लिए . योजना बनाने के लिए बहुत कुछ नहीं है, बेहतर होगा कि किसी भी ओवरहेड को बचाएं।

  • प्रति सत्र एकल (या बहुत कम) कॉल के लिए . पीएल/पीजीएसक्यूएल की पेशकश के लिए तैयार बयानों के माध्यम से योजना कैशिंग से कुछ भी हासिल नहीं करना है। नीचे देखें।

  • यदि उन्हें आम तौर पर बड़े प्रश्नों के संदर्भ में बुलाया जाता है और वे इनलाइन . होने के लिए पर्याप्त सरल हैं ।

  • अनुभव . की कमी के कारण पीएल/पीजीएसक्यूएल जैसी किसी भी प्रक्रियात्मक भाषा के साथ। बहुत से लोग SQL को अच्छी तरह जानते हैं और SQL फ़ंक्शंस के लिए आपको बस इतना ही चाहिए। पीएल/पीजीएसक्यूएल के बारे में कुछ ऐसा ही कह सकते हैं। (हालांकि यह काफी आसान है।)

  • थोड़ा छोटा कोड। कोई ब्लॉक ओवरहेड नहीं।

PL/pgSQL फ़ंक्शन

... बेहतर विकल्प हैं:

  • जब आपको किसी प्रक्रियात्मक तत्वों . की आवश्यकता हो या चर जो स्पष्ट रूप से SQL फ़ंक्शंस में उपलब्ध नहीं हैं।

  • किसी भी प्रकार के डायनामिक SQL . के लिए , जहां आप निर्माण करते हैं और EXECUTE गतिशील रूप से बयान। SQL इंजेक्शन से बचने के लिए विशेष देखभाल की आवश्यकता है। अधिक विवरण:

    • फ़ंक्शन बनाम तैयार क्वेरी पोस्ट करता है
  • जब आपके पास गणना . हो जिसका पुन:उपयोग किया जा सकता है कई जगहों पर और इस उद्देश्य के लिए सीटीई को बढ़ाया नहीं जा सकता है। SQL फ़ंक्शन में आपके पास चर नहीं होते हैं और बार-बार गणना करने या किसी तालिका में लिखने के लिए मजबूर किया जाएगा। यह संबंधित उत्तर dba.SE पर साथ-साथ है कोड उदाहरण SQL फ़ंक्शन / plpgsql फ़ंक्शन / CTE के साथ एक क्वेरी का उपयोग करके समान समस्या को हल करने के लिए:

    • किसी फ़ंक्शन में पैरामीटर कैसे पास करें

अन्य प्रक्रियात्मक भाषाओं की तुलना में असाइनमेंट कुछ अधिक महंगे हैं। ऐसी प्रोग्रामिंग शैली अपनाएं जो आवश्यकता से अधिक असाइनमेंट का उपयोग न करे।

  • जब किसी फ़ंक्शन को इनलाइन नहीं किया जा सकता है और बार-बार कॉल किया जाता है। SQL फ़ंक्शन के विपरीत, क्वेरी योजनाओं को कैश किया जा सकता है PL/pgSQL फ़ंक्शन के अंदर सभी SQL कथनों के लिए; उनके साथ तैयार बयानों . जैसा व्यवहार किया जाता है , योजना को उसी सत्र में बार-बार कॉल करने के लिए कैश किया जाता है (यदि पोस्टग्रेज़ को हर बार पुन:नियोजन की तुलना में कैश्ड (जेनेरिक) योजना के बेहतर प्रदर्शन की अपेक्षा है। यही कारण है कि PL/pgSQL फ़ंक्शन आम तौर पर तेज़<होते हैं। /मजबूत> ऐसे मामलों में पहली दो कॉलों के बाद।

    इनमें से कुछ मदों पर चर्चा करते हुए pgsql-प्रदर्शन पर एक सूत्र दिया गया है:

    • पुन::pl/pgsql sql वाले से बेहतर प्रदर्शन करता है?
  • जब आपको त्रुटियों को ट्रैप करने . की आवश्यकता हो ।

  • ट्रिगर फ़ंक्शन . के लिए ।

  • डीडीएल स्टेटमेंट्स को शामिल करते समय ऑब्जेक्ट्स को बदलना या सिस्टम कैटलॉग को किसी भी तरह से बाद के कमांड के लिए प्रासंगिक - क्योंकि SQL फ़ंक्शंस में सभी स्टेटमेंट्स को एक बार में पार्स किया जाता है, जबकि PL/pgSQL फंक्शन्स प्लान करते हैं और प्रत्येक स्टेटमेंट को क्रमिक रूप से निष्पादित करते हैं (जैसे तैयार स्टेटमेंट)। देखें:

    • PL/pgSQL फ़ंक्शन के साइड इफेक्ट क्यों हो सकते हैं, जबकि SQL फ़ंक्शन नहीं कर सकते हैं?

इस पर भी विचार करें:

  • PostgreSQL संग्रहीत कार्यविधि प्रदर्शन

वास्तव में वापसी . के लिए PL/pgSQL फ़ंक्शन से, आप लिख सकते हैं:

CREATE FUNCTION f2(istr varchar)
  RETURNS text AS
$func$
BEGIN
   RETURN 'hello! ';  -- defaults to type text anyway
END
$func$ LANGUAGE plpgsql;

और भी तरीके हैं:

  • क्या मैं एक plpgsql फ़ंक्शन को एक चर का उपयोग किए बिना एक पूर्णांक लौटा सकता हूं?
  • "फ़ंक्शन से वापसी" पर मैनुअल


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में प्रति पंक्ति केवल एक बार आस्थगित ट्रिगर निष्पादित करें

  2. एक बाइट के रूप में PostgreSQL में हेक्स के साथ टेक्स्ट स्ट्रिंग सम्मिलित करना

  3. पोस्टग्रेस्क्ल में जहां क्लॉज में कॉलम एलियासेस तक पहुंचें

  4. PostgreSQL में फ्रीजिंग का प्रबंधन

  5. PostgreSQL का उपयोग करके सभी डेटाबेस को कैसे सूचीबद्ध करें