Anda tidak dapat menggunakan array_agg()
untuk menghasilkan array multi-dimensi, setidaknya tidak hingga PostgreSQL 9.4.
(Tapi Postgres 9.5 yang akan datang mengirimkan varian baru array_agg()
itu bisa!)
Apa yang Anda dapatkan dari kueri @Matt Ball adalah larik catatan (the_table[]
).
Array hanya dapat menampung elemen dengan tipe dasar yang sama. Anda jelas memiliki tipe nomor dan string. Ubah semua kolom (yang belum) menjadi text
untuk membuatnya bekerja.
Anda dapat membuat fungsi agregat untuk ini seperti yang saya tunjukkan kepada Anda di sini sebelumnya.
CREATE AGGREGATE array_agg_mult (anyarray) (
SFUNC = array_cat
,STYPE = anyarray
,INITCOND = '{}'
);
Telepon:
SELECT array_agg_mult(ARRAY[ARRAY[name, id::text, url]]) AS tbl_mult_arr
FROM tbl;
Perhatikan ARRAY[]
tambahan layer untuk membuatnya menjadi array multidimensi (tepatnya 2 dimensi).
Demo instan:
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;