Du kan ikke bruge array_agg()
at producere multidimensionelle arrays, i hvert fald ikke op til PostgreSQL 9.4.
(Men den kommende Postgres 9.5 sender en ny variant af array_agg()
det kan!)
Det, du får ud af @Matt Balls forespørgsel, er en række poster (the_table[]
).
Et array kan kun indeholde elementer af samme basistype. Du har åbenbart tal- og strengtyper. Konverter alle kolonner (der ikke allerede er det) til text
for at få det til at fungere.
Du kan oprette en samlet funktion til dette, som jeg har demonstreret for dig her før.
CREATE AGGREGATE array_agg_mult (anyarray) (
SFUNC = array_cat
,STYPE = anyarray
,INITCOND = '{}'
);
Ring til:
SELECT array_agg_mult(ARRAY[ARRAY[name, id::text, url]]) AS tbl_mult_arr
FROM tbl;
Bemærk den ekstra ARRAY[]
lag for at gøre det til et multidimensionelt array (2-dimensionelt, for at være præcis).
Øjeblikkelig 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;