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

Guy*_*ark 1 postgresql plpgsql array-agg

我知道有 的过程SELECT array_agg(f) FROM (SELECT blah FROM stuff) f,这在 SQL 中很棒,但是在 PL/pgSQL 中编写函数时,有没有简写方法?

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

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

而不是长, DECLARE a 变量,做 a SELECT array_agg(f) INTO ...,这是我一直在做的。我似乎已经使用相同的 SQL 字符串实现了数百种实现,但我真的很想减少我的代码,我的手指因所有多余的输入而变得麻木。

这种速记方法缺少什么?

Pav*_*ule 5

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

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

  • @GuyPark:您可以将“SELECT rs FROM json_object_keys(myjson) rs”缩短为“SELECT json_object_keys(myjson)” (2认同)