获取值列表作为数组

Getting list of values as array

我有这个查询:

SELECT id FROM a

id 的类型是 integer

我想得到整数数组的结果:[26053,26021],这个结果返回给一个迭代元素的函数。

根据我在手册中阅读的内容,我编写了以下查询:

select array_to_string( array( SELECT id FROM a where ... ), ',' ) 

问题是它 returns 我是一个字符串 26053,26021 并且当我迭代结果时它会:

    ... (id =2 or id =6 or id =0 or id =5 or id =3 or id =,
         or id =2 or id =6 or id =0 or id =2 or id =1)

如您所见,它将结果视为字符串而不是数组,每个字符都是一个元素。

我如何只得到一个数组?将字符串转换回数组的唯一解决方案是什么?没有办法直接转换吗?

对于只有一个结果行的简单情况,array constructor 是最好的(最简单,最快)。你实际上已经有了,只需删除 array_to_string(),它将数组转换为字符串(顾名思义):

SELECT ARRAY(SELECT id FROM a WHERE ... ) AS id_arr;

对于具有多个结果行的情况,请查看聚合函数 array_agg()。示例:

SELECT b, array_agg(id) AS id_arr
FROM   a
WHERE  ...
GROUP  BY b;

旁白:
数组常量(数组的文本表示)的标准 Postgres 语法是 '{26053,26021}' - 带有花括号和单引号。根据上下文,您可能需要也可能不需要添加显式转换:'{26053,26021}'::int[] 或者您可以使用另一个数组构造函数,这次基于整数常量而不是子查询:ARRAY[26053,26021].

[26053,26021] 介于两者之间,这两种方式都行不通。