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

फ़ंक्शन के लिए कई सेट या मानों की सरणियाँ पास करें

आप इसे एक साधारण SQL फ़ंक्शन के साथ प्राप्त कर सकते हैं। मुख्य विशेषता फ़ंक्शन है generate_subscripts() :

CREATE OR REPLACE FUNCTION f_attendance(_arr2d int[])
  RETURNS SETOF attendance AS
$func$
   SELECT a.*
   FROM   generate_subscripts($1, 1) i
   JOIN   attendance a ON a.class   = $1[i][1]
                      AND a.section = $1[i][2]
$func$  LANGUAGE ROWS 10 sql STABLE;

कॉल करें:

SELECT * FROM f_attendance(ARRAY[[1,1],[2,2]]);

या एक सरणी के साथ समान शाब्दिक - जो कुछ संदर्भों में अधिक सुविधाजनक है, विशेष रूप से तैयार बयानों के साथ:

SELECT * FROM f_attendance('{{1,1},{2,2}}');

समारोह हमेशा एक 2D सरणी की अपेक्षा करता है। यहां तक ​​कि अगर आप एक जोड़ी पास करते हैं, तो उसे घोंसला दें:

SELECT * FROM f_attendance('{{1,1}}');

आपके कार्यान्वयन का ऑडिट

  1. आपने फ़ंक्शन को VOLATILE . बनाया है , लेकिन यह STABLE हो सकता है . प्रति दस्तावेज़:

    <ब्लॉककोट>

    इस स्नैपशॉट व्यवहार के कारण, एक फ़ंक्शन जिसमें केवल SELECT होता है कमांड को सुरक्षित रूप से STABLE marked चिह्नित किया जा सकता है ।

    संबंधित:

    • किसी पैरामीटर को दिनांक फ़ंक्शन में कैसे पास करें
  2. आप LANGUAGE plpgsql . का भी उपयोग करते हैं sql . के बजाय , जो समझ में आता है यदि आप एक ही सत्र में कई बार फ़ंक्शन निष्पादित करते हैं। लेकिन फिर आपको इसे STABLE भी बनाना होगा या आप उस संभावित प्रदर्शन लाभ को खो देते हैं। मैनुअल एक बार फिर:

    <ब्लॉककोट>

    STABLE और IMMUTABLE फ़ंक्शन कॉलिंग क्वेरी की शुरुआत के रूप में स्थापित स्नैपशॉट का उपयोग करते हैं, जबकि VOLATILE फ़ंक्शन उनके द्वारा निष्पादित प्रत्येक क्वेरी की शुरुआत में एक ताज़ा स्नैपशॉट प्राप्त करते हैं।

  3. आपका EXPLAIN आउटपुट एक केवल अनुक्रमणिका स्कैन . दिखाता है , अनुक्रमिक स्कैन नहीं जैसा कि आपको अपनी टिप्पणी में संदेह है।

  4. आपके EXPLAIN . में एक सॉर्ट स्टेप भी है आउटपुट जो आपके द्वारा दिखाए गए कोड से मेल नहीं खाता। क्या आप वाकई सही EXPLAIN . कॉपी किए हैं आउटपुट? वैसे भी आपने इसे कैसे प्राप्त किया? PL/pgSQL फ़ंक्शन EXPLAIN . के लिए ब्लैक बॉक्स हैं . क्या आपने auto_explain . का उपयोग किया था ? विवरण:

    • pgpsql में लिखे गए UDF आह्वान की क्वेरी योजना पोस्ट करता है
  5. पोस्टग्रेस क्वेरी प्लानर को पता नहीं है कि पारित पैरामीटर में कितने सरणी तत्व होंगे, इसलिए क्वेरी की योजना बनाना कठिन है और यह अनुक्रमिक स्कैन (अधिक कारकों के आधार पर) के लिए डिफ़ॉल्ट हो सकता है। आप अपेक्षित संख्या में पंक्तियों की घोषणा करके मदद कर सकते हैं। यदि आपके पास आमतौर पर 10 से अधिक आइटम नहीं हैं तो ROWS 10 add जोड़ें जैसा मैंने अब ऊपर किया था। और फिर से परीक्षण करें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CASE और GROUP BY के साथ पिवट का गतिशील विकल्प

  2. मैं हेरोकू पर 5 एमबी पोस्टग्रेएसक्यूएल में कितने रिकॉर्ड स्टोर कर सकता हूं?

  3. पोस्टग्रेस्क्ल को पहली बार कैसे कॉन्फ़िगर करें?

  4. कैस्केड डिलीट सिर्फ एक बार

  5. मौजूदा auth.User डेटा को नए Django 1.5 कस्टम उपयोगकर्ता मॉडल में माइग्रेट करना?