Не можете да използвате array_agg()
за създаване на многоизмерни масиви, поне не до PostgreSQL 9.4.
(Но предстоящият Postgres 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;