array_agg()
は使用できません 少なくともPostgreSQL9.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;