Преобразование набора возвращаемых функций в массив

#postgresql

Вопрос:

У меня есть пользовательская функция postgres f_test с типом возврата as RETURNS SETOF TYPE1 . TYPE1 это тип с примерно 10 столбцами.

Внутри процедуры postgres P1 я хочу сохранить выходные f_test данные в переменной массива.

Я попытался выполнить приведенный ниже код, чтобы сделать то же самое внутри процедуры P1.

 v_array := array_agg(f_test());
 

Но я получаю приведенную ниже ошибку из-за этого утверждения.

 %aggregate function calls cannot contain set-returning function calls
 

Я также попробовал приведенный ниже код

 v_array := array_agg(row(f_test()));
 

что тоже возвращает ту же ошибку.

Как я могу сохранить результирующий набор f_test в переменной массива?

Ответ №1:

Вы можете использовать метод SELECT INTO:

 select  
  array_agg(f_test)
into 
  v_array
from 
  f_test();
 

Вы также можете использовать оператор присваивания:

 v_array := (select array_agg(f_test) from f_test());