select数据到Postgres数组

我有以下数据:

name id url John 1 someurl.com Matt 2 cool.com Sam 3 stackoverflow.com 

我怎样才能在Postgres中编写一个SQL语句来select这个数据到一个multidimensional array中,例如:

 {{John, 1, someurl.com}, {Matt, 2, cool.com}, {Sam, 3, stackoverflow.com}} 

我以前在Postgres中已经看到过这种数组用法,但是不知道如何从表中select数据到这种数组格式。

假设这里所有的列都是texttypes的。

你不能使用array_agg()来产生multidimensional array,至less不能达到PostgreSQL 9.4。
(但即将发布的Postgres 9.5发布了一个新的array_agg()变体 !)

你从@Mat球的查询中得到的是一组logging( the_table[] )。

数组只能容纳相同基本types的元素。 你显然有数字和stringtypes。 将所有列(尚未)转换为text以使其工作。

您可以为此创build一个聚合函数,就像我以前在这里演示的那样。

 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[]图层使其成为一个multidimensional array(准确地说是二维数组)。

即时演示:

 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; 

你需要使用一个聚合函数 ; array_agg应该做你需要的。

 SELECT array_agg(s) FROM (SELECT name, id, url FROM the_table ORDER BY id) AS s;