Это вариация функции plpgsql, которая возвращает несколько столбцов, которые вызывается несколько раз. Тем не менее, я надеялся найти решение своих конкретных обстоятельств.
У меня есть функция, которая обрабатывает массив строк с заданным параметром и возвращает набор строк + новый столбец.
CREATE OR REPLACE foo(data data[], parameter int) RETURNS SETOF enhanceddata AS
...
Функция работает в тестовом примере только с одним набором данных
SELECT * FROM foo( (SELECT ARRAY_AGG(data) FROM datatable GROUP BY dataid WHERE dataid = something), 1)
Но я хотел бы заставить его работать с несколькими группами данных, не передавая функции dataid
. Я попробовал несколько вариантов:
SELECT dataid, (foo(ARRAY_AGG(data)),1).*
FROM dataset
WHERE dataid = something -- only testing on 1
GROUP BY dataid
Но функция вызывается один раз для каждого столбца.