unnest()
मॉड्यूल का हिस्सा नहीं है intarray
, लेकिन मानक PostgreSQL के। हालांकि, आपको संस्करण की आवश्यकता है 8.4मजबूत> या बाद में
उसके लिए।
तो आप इसे हाल के संस्करण में अपग्रेड करके हल कर सकते हैं, अधिमानतः वर्तमान संस्करण 9.1। देखें PostgreSQL प्रोजेक्ट की वर्जनिंग नीति ।
यदि आपको हेरोकू के साझा डेटाबेस का उपयोग करना चाहिए, जो वर्तमान में संस्करण 8.3 का उपयोग करता है, तो वे भी उन्नयन की तलाश में हैं। Heroku Labs पहले से ही 9.1 ऑफ़र कर रही है ।
जैसा कि @Abdul ने टिप्पणी की, आप एक गरीब आदमी के unnest()
. को लागू कर सकते हैं PostgreSQL 8.4 से पहले के संस्करणों में स्वयं:
CREATE OR REPLACE FUNCTION unnest(anyarray)
RETURNS SETOF anyelement AS
$BODY$
SELECT $1[i] FROM generate_series(array_lower($1,1), array_upper($1,1)) i;
$BODY$ LANGUAGE sql IMMUTABLE;
हालांकि, ध्यान रखें कि यह केवल एक-आयामी सरणियों के लिए काम करता है . (जैसा कि PostgreSQL के unnest()
. के विपरीत है जो कई आयामों के साथ सरणियाँ लेता है):
SELECT unnest('{1,2,3,4}'::int[]) -- works
SELECT unnest('{{1,2},{3,4},{5,6}}'::int[]) -- fails! (returns all NULLs)
आप कर सकते थे n-आयामी सरणियों के लिए अधिक फ़ंक्शन लागू करें:
CREATE OR REPLACE FUNCTION unnest2(anyarray) -- for 2-dimensional arrays
RETURNS SETOF anyelement AS
$BODY$
SELECT $1[i][j]
FROM (
SELECT i, generate_series(array_lower($1,2), array_upper($1,2)) j
FROM (
SELECT generate_series(array_lower($1,1), array_upper($1,1)) i
) x
) y;
$BODY$ LANGUAGE sql IMMUTABLE;
कॉल करें:
SELECT unnest2('{{1,2},{3,4},{5,6}}'::int[]) -- works!
आप एक PL/pgSQL फ़ंक्शन भी लिख सकते हैं जो कई आयामों से संबंधित है ...