आप प्यार करेंगे 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
. में कई सेट-रिटर्न फ़ंक्शन सूची अब "लॉक-स्टेप" में पंक्तियों का उत्पादन करती है। देखें:
- सेलेक्ट क्लॉज में कई सेट-रिटर्निंग फंक्शन के लिए अपेक्षित व्यवहार क्या है?