Преобразование возвращенного SETOF в массив в PL/PgSQL (в частности)

Я знаю, что есть процесс 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);

вместо long объявите переменную, сделайте SELECT array_agg(f) INTO ...что я и делал. Мне кажется, сотни реализаций используют одну и ту же строку SQL, но я действительно хочу сократить свой код, мои пальцы немеют от всей избыточной типизации.

Чего мне не хватает в этом сокращенном методе?

1 ответ

Решение

Вы можете использовать конструктор ARRAY(subselect)

DO $$
DECLARE a int[];
BEGIN
  a := ARRAY(SELECT * FROM generate_series(1,10));
  RAISE NOTICE 'result: %', a;
END;
$$;
Другие вопросы по тегам