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

mit*_*esh 60 sql arrays postgresql plpgsql

我的代码是:

SELECT column_name
FROM information.SCHEMA.columns
WHERE table_name = 'aean'
Run Code Online (Sandbox Code Playgroud)

它返回表的列名aean.
现在我宣布了一个数组:

DECLARE colnames text[]
Run Code Online (Sandbox Code Playgroud)

如何在列号数组中存储select的输出.
是否需要初始化colnames?

Den*_*rdy 113

有两种方法.一个是聚合:

SELECT array_agg(column_name::TEXT)
FROM information.schema.columns
WHERE table_name = 'aean'
Run Code Online (Sandbox Code Playgroud)

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

SELECT ARRAY(
SELECT column_name 
FROM information.schema.columns 
WHERE table_name = 'aean')
Run Code Online (Sandbox Code Playgroud)

我假设这是用于plpgsql.在这种情况下,您可以像这样分配:

colnames := ARRAY(
SELECT column_name
FROM information.schema.columns
WHERE table_name='aean'
);
Run Code Online (Sandbox Code Playgroud)

  • 对于任何进一步研究plpgsql部分的人,你可以`DECLARE`一个数组为`my_array INTEGER [];`(或任何相关的类型).您还可以在查询的`WHERE`子句中使用该数组,如`WHERE values = ANY(my_array)`."ANY"采用数组或集合,并检查该数组/集合中是否存在,因此它在某种意义上与"IN()"等效地起作用 (4认同)

Aug*_*imo 6

常规的:

SELECT post_id FROM posts WHERE(poster_name='John');

output: [
  {'post_id': 1},
  {'post_id': 2},
  {'post_id': 3},
]
Run Code Online (Sandbox Code Playgroud)

使用ARRAY_AGG

SELECT ARRAY_AGG(post_id) FROM posts WHERE(poster_name='John');

output: [
 {[1, 2, 3]}
]
Run Code Online (Sandbox Code Playgroud)


pts*_*ski 5

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

SELECT ARRAY(
SELECT column_name::text
FROM information_schema.columns
WHERE table_name='aean'
)
Run Code Online (Sandbox Code Playgroud)

  • 这似乎不再是这种情况。 (2认同)