U kunt array_agg()
. niet gebruiken om multidimensionale arrays te produceren, in ieder geval niet tot PostgreSQL 9.4.
(Maar de komende Postgres 9.5 levert een nieuwe variant van array_agg()
dat kan!)
Wat u uit de zoekopdracht van @Matt Ball haalt, is een reeks records (the_table[]
).
Een array kan alleen elementen van hetzelfde basistype bevatten. Je hebt duidelijk nummer- en tekenreekstypes. Converteer alle kolommen (die dat nog niet zijn) naar text
om het te laten werken.
Je kunt hiervoor een verzamelfunctie maken, zoals ik je hier eerder heb laten zien.
CREATE AGGREGATE array_agg_mult (anyarray) (
SFUNC = array_cat
,STYPE = anyarray
,INITCOND = '{}'
);
Bel:
SELECT array_agg_mult(ARRAY[ARRAY[name, id::text, url]]) AS tbl_mult_arr
FROM tbl;
Let op de extra ARRAY[]
laag om er een multidimensionale array van te maken (2-dimensionaal, om precies te zijn).
Directe demo:
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;