Du kan inte använda array_agg()
för att producera flerdimensionella arrayer, åtminstone inte upp till PostgreSQL 9.4.
(Men den kommande Postgres 9.5 skickar en ny variant av array_agg()
det kan!)
Det du får ut av @Matt Balls fråga är en rad poster (the_table[]
).
En array kan bara innehålla element av samma bastyp. Du har uppenbarligen nummer och strängtyper. Konvertera alla kolumner (som inte redan är det) till text
för att få det att fungera.
Du kan skapa en samlad funktion för detta som jag visade för dig här tidigare.
CREATE AGGREGATE array_agg_mult (anyarray) (
SFUNC = array_cat
,STYPE = anyarray
,INITCOND = '{}'
);
Ring:
SELECT array_agg_mult(ARRAY[ARRAY[name, id::text, url]]) AS tbl_mult_arr
FROM tbl;
Notera den extra ARRAY[]
lager för att göra det till en flerdimensionell array (2-dimensionell, för att vara exakt).
Omedelbar 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;