Bạn không thể sử dụng array_agg()
để tạo mảng đa chiều, ít nhất không phải lên đến PostgreSQL 9.4.
(Nhưng Postgres 9.5 sắp tới gửi một biến thể mới của array_agg()
điều đó có thể!)
Những gì bạn nhận được từ truy vấn của @Matt Ball là một loạt các bản ghi (the_table[]
).
Một mảng chỉ có thể chứa các phần tử của cùng một kiểu cơ sở. Bạn rõ ràng có số và loại chuỗi. Chuyển đổi tất cả các cột (chưa có) thành text
để làm cho nó hoạt động.
Bạn có thể tạo một hàm tổng hợp cho điều này giống như tôi đã trình bày với bạn ở đây trước đây.
CREATE AGGREGATE array_agg_mult (anyarray) (
SFUNC = array_cat
,STYPE = anyarray
,INITCOND = '{}'
);
Gọi:
SELECT array_agg_mult(ARRAY[ARRAY[name, id::text, url]]) AS tbl_mult_arr
FROM tbl;
Lưu ý ARRAY[]
bổ sung lớp để biến nó thành một mảng đa chiều (chính xác là 2 chiều).
Bản demo tức thì:
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;