No puede usar array_agg()
para producir arreglos multidimensionales, al menos no hasta PostgreSQL 9.4.
(Pero el próximo Postgres 9.5 envía una nueva variante de array_agg()
eso puede!)
Lo que obtiene de la consulta de @Matt Ball es una matriz de registros (the_table[]
).
Una matriz solo puede contener elementos del mismo tipo base. Obviamente tienes tipos de números y cadenas. Convierta todas las columnas (que aún no lo estén) en text
para que funcione.
Puedes crear una función agregada para esto como te demostré aquí antes.
CREATE AGGREGATE array_agg_mult (anyarray) (
SFUNC = array_cat
,STYPE = anyarray
,INITCOND = '{}'
);
Llamar:
SELECT array_agg_mult(ARRAY[ARRAY[name, id::text, url]]) AS tbl_mult_arr
FROM tbl;
Tenga en cuenta el ARRAY[]
adicional capa para convertirla en una matriz multidimensional (bidimensional, para ser precisos).
Demostración instantánea:
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;