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

समानांतर में कई सरणियों को खोलना

आप प्यार करेंगे Postgres की यह नई विशेषता 9.4 :

unnest(anyarray, anyarray [, ...])

unnest() बहुप्रतीक्षित (कम से कम मेरे द्वारा) समानांतर में कई सरणियों को अननेस्ट करने की क्षमता के साथ साफ-सफाई . मैनुअल:

<ब्लॉकक्वॉट>

पंक्तियों के एक सेट में कई सरणियों (संभवतः विभिन्न प्रकार के) का विस्तार करें। इसकी अनुमति केवल FROM खंड में है;

यह नए ROWS FROM . का विशेष कार्यान्वयन है सुविधा।

आपका कार्य अब बस हो सकता है:

CREATE OR REPLACE FUNCTION multi_unnest(_some_id int
                                      , _amounts numeric[]
                                      , _invoices text[])
  RETURNS TABLE (some_id int, amount numeric, invoice text) AS
$func$
SELECT _some_id, u.* FROM unnest(_amounts, _invoices) u;
$func$ LANGUAGE sql;

कॉल करें:

SELECT * FROM multi_unnest(123, '{100, 40.5, 76}'::numeric[] 
                        , '{01-2222-05,01-3333-04,01-4444-08}'::text[]);

बेशक, साधारण फॉर्म को सादे SQL . से बदला जा सकता है (कोई अतिरिक्त कार्य नहीं):

SELECT 123 AS some_id, *
FROM unnest('{100, 40.5, 76}'::numeric[]
          , '{01-2222-05,01-3333-04,01-4444-08}'::text[]) AS u(amount, invoice);

पुराने संस्करणों में (पोस्टग्रेज 9.3- ), आप कम सुरुचिपूर्ण और कम सुरक्षित फ़ॉर्म का उपयोग कर सकते हैं:

SELECT 123 AS some_id
     , unnest('{100, 40.5, 76}'::numeric[]) AS amount
     , unnest('{01-2222-05,01-3333-04,01-4444-08}'::text[]) AS invoice;

पुराने शॉर्टहैंड फॉर्म की चेतावनी:गैर-मानक होने के अलावा SELECT में सेट-रिटर्निंग फ़ंक्शन है सूची में, लौटाई गई पंक्तियों की संख्या तत्वों की प्रत्येक सरणी संख्या का सबसे कम सामान्य गुणक होगा (असमान संख्याओं के लिए आश्चर्यजनक परिणाम के साथ)। इन संबंधित उत्तरों में विवरण:

  • PostgreSQL में समानांतर अननेस्ट () और सॉर्ट क्रम
  • क्या PostgreSQL में zip() फ़ंक्शन जैसा कुछ है जो दो सरणियों को जोड़ता है?

इस व्यवहार को अंततः पोस्टग्रेज 10 . के साथ साफ कर दिया गया है . SELECT . में कई सेट-रिटर्न फ़ंक्शन सूची अब "लॉक-स्टेप" में पंक्तियों का उत्पादन करती है। देखें:

  • सेलेक्ट क्लॉज में कई सेट-रिटर्निंग फंक्शन के लिए अपेक्षित व्यवहार क्या है?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres SQL में `->>` और `->` में क्या अंतर है?

  2. एक टेलीफोन नंबर को स्ट्रिंग बनाम पूर्णांक के रूप में स्टोर करना सबसे अच्छा क्यों है?

  3. दिल की धड़कन के साथ PostgreSQL के लिए उच्च उपलब्धता को ट्रैक करना

  4. कैस्केडिंग डिलीट से प्रभावित तालिकाओं को कैसे सूचीबद्ध करें

  5. इसके कारण:java.lang.NoSuchMethodError:org.postgresql.core.BaseConnection.getEncoding()Lorg/postgresql/core/Encoding;