将返回的 SETOF 转换为 PL/PgSQL 中的数组(具体而言)

Converting a returned SETOF into An Array in PL/PgSQL (specifically)

我知道有SELECT array_agg(f) FROM (SELECT blah FROM stuff) f的过程,在SQL里很厉害,但是在PL/pgSQL里写函数的时候,有没有shorthand的方法??

我正在尝试将 JSON 键放入一个数组中,我可以用它来查看长度。 像...

v_len := array_length( array_agg(json_object_keys(myjson)), 1);

而不是长篇大论,声明一个变量,做一个 SELECT array_agg(f) INTO ...,我一直在做。我似乎有数百个使用相同 SQL 字符串的实现,但我真的想减少我的代码,我的手指因所有冗余输入而麻木。

shorthand 方法我错过了什么?

您可以使用 ARRAY(subselect) 构造函数

DO $$
DECLARE a int[];
BEGIN
  a := ARRAY(SELECT * FROM generate_series(1,10));
  RAISE NOTICE 'result: %', a;
END;
$$;