आप array_agg()
का उपयोग नहीं कर सकते हैं बहु-आयामी सरणियों का उत्पादन करने के लिए, कम से कम PostgreSQL 9.4 तक नहीं।
(लेकिन आगामी पोस्टग्रेस 9.5 array_agg()
. का एक नया संस्करण शिप करता है वह कर सकता है!)
@Matt Ball की क्वेरी से आपको जो मिलता है वह रिकॉर्ड की एक सरणी है (the_table[]
)।
एक सरणी में केवल एक ही आधार प्रकार के तत्व हो सकते हैं। आपके पास स्पष्ट रूप से संख्या और स्ट्रिंग प्रकार हैं। सभी कॉलम (जो पहले से नहीं हैं) को text
. में बदलें इसे काम करने के लिए।
आप इसके लिए एक समग्र कार्य बना सकते हैं जैसा कि मैंने आपको यहां पहले दिखाया था।
CREATE AGGREGATE array_agg_mult (anyarray) (
SFUNC = array_cat
,STYPE = anyarray
,INITCOND = '{}'
);
कॉल करें:
SELECT array_agg_mult(ARRAY[ARRAY[name, id::text, url]]) AS tbl_mult_arr
FROM tbl;
अतिरिक्त ARRAY[]
पर ध्यान दें परत इसे एक बहुआयामी सरणी बनाने के लिए (2-आयामी, सटीक होने के लिए)।
तत्काल डेमो:
WITH tbl(id, txt) AS (
VALUES
(1::int, 'foo'::text)
,(2, 'bar')
,(3, '}b",') -- txt has meta-characters
)
, x AS (
SELECT array_agg_mult(ARRAY[ARRAY[id::text,txt]]) AS t
FROM tbl
)
SELECT *, t[1][3] AS arr_element_1_1, t[3][4] AS arr_element_3_2
FROM x;