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

Postgres फ़ंक्शन में अस्थायी तालिका नहीं छोड़ सकता:इस सत्र में सक्रिय प्रश्नों द्वारा उपयोग किया जा रहा है

त्रुटि संदेश बल्कि स्पष्ट है, जब आप इसका उपयोग कर रहे हों तो आप एक अस्थायी तालिका नहीं छोड़ सकते।

आप ON COMMIT DROP . जोड़कर समस्या से बचने में सक्षम हो सकते हैं :

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

CREATE FUNCTION everything(waypoints)
  RETURNS TABLE(node int, xy text[]) AS
$func$
   WITH bbox      AS (SELECT ... FROM waypoints)  -- not the fct. parameter!
    , b_spaces    AS (SELECT ... )
    , b_graph     AS (SELECT ... )
    , local_green AS (SELECT ... )
    , aug_temp    AS (SELECT ... )
    , b_graph2(source, target, cost) AS (
        SELECT ... FROM b_graph
        UNION ALL  -- guessing you really want UNION ALL
        SELECT ... FROM aug_temp
        UNION ALL 
        SELECT ... FROM aug_temp
       )
    , results     AS (SELECT id1, ... FROM b_graph2)
    , pkg         AS (SELECT loc, ... )
   SELECT id1, array_agg(loc) 
   FROM   pkg
   GROUP  BY id1
$func$ LANGUAGE sql;

दृश्य केवल एक क्वेरी ("नुस्खा") संग्रहीत कर रहे हैं, वास्तविक परिणामी मान ("सूप") नहीं।

आमतौर पर अस्थायी तालिकाएँ बनाने के बजाय CTE का उपयोग करना सस्ता होता है।
प्रश्नों में व्युत्पन्न तालिकाएँ , उनके विशिष्ट समग्र प्रदर्शन (इंडेक्स से जुड़े विशेष मामलों के अपवाद) के आधार पर क्रमबद्ध। धीमे से तेज़ की ओर:

CREATE TABLE
CREATE UNLOGGED TABLE
CREATE TEMP TABLE
CTE
subquery

UNION डुप्लिकेट पंक्तियों को मोड़ने का प्रयास करेंगे। आमतौर पर, लोग वास्तव में UNION ALL want चाहते हैं , जो सिर्फ पंक्तियों को जोड़ता है। तेजी से और धोखे को हटाने की कोशिश नहीं करता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. तीन तालिकाओं में शामिल हों जिनमें से एक में प्राथमिक कुंजी न हो

  2. डेटाबेस को पोस्टग्रेज करने के लिए टेबल व्यू बनाने के लिए क्यूटी डिज़ाइनर का उपयोग करना

  3. रिकर्सिव क्लॉज के साथ प्रयोग का चयन कैसे करें

  4. Postgres क्यों कहता है कि कॉलम मौजूद नहीं है?

  5. क्या Django SearchVectorField में अपना खुद का तार जोड़ना संभव है?