将选择查询的输出存储在postgres中的一个数组中


86

我的代码是:

SELECT column_name
FROM information.SCHEMA.columns
WHERE table_name = 'aean'

它返回table的列名aean
现在,我声明了一个数组:

DECLARE colnames text[]

如何将select的输出存储在colnames数组中。
是否需要初始化名字?


+1,我到达这里时遇到了完全相同的错误消息-错误:找不到数据类型为information_schema.sql_identifier的数组类型。正在尝试array_agg(column_name, ',')
jerrymouse 2012年

Answers:


150

有两种方法。一种是合计:

SELECT array_agg(column_name::TEXT)
FROM information.schema.columns
WHERE table_name = 'aean'

另一种是使用数组构造函数:

SELECT ARRAY(
SELECT column_name 
FROM information.schema.columns 
WHERE table_name = 'aean')

我想这是为plpgsql。在这种情况下,您可以像这样分配它:

colnames := ARRAY(
SELECT column_name
FROM information.schema.columns
WHERE table_name='aean'
);

您能给我能在postgres上工作的代码吗,因为这不适用于postgres错误:无法为数据类型information_schema.sql_identifier找到数组类型
mitesh 2011年

不好意思。无意识的复制和粘贴使array_agg()包含在所有三个调用中。为了使您的PG版本满意,我还键入了最初的版本。
Denis de Bernardy 2011年

9
对于任何进一步查看plpgsql部分的人,您都可以DECLARE将数组作为my_array INTEGER[];(或任何相关类型)。您也可以在查询的WHERE子句中使用数组,例如WHERE values = ANY(my_array)。在ANY接受一个阵列或一组,并且将在该阵列/组检查存在,所以它等效作用是IN ()在某种意义上
user2490003

11

我有完全一样的问题。Denis给出的解决方案的又一可行的修改(必须指定类型):

SELECT ARRAY(
SELECT column_name::text
FROM information_schema.columns
WHERE table_name='aean'
)

1
似乎不再是这种情况了。
苏联
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.