Мне интересно, возможно ли каким-либо образом объединить PLyResults внутри функции. Например, допустим, во-первых, у меня есть функция _get_data, которая при наличии кортежа (id, index) возвращает таблицу значений:
CREATE OR REPLACE FUNCTION _get_data(id bigint, index bigint):
RETURNS TABLE(oid bigint, id bigint, val double precision) AS
$BODY$
#...process for fetching the data, irrelevant for the question.
return recs
$BODY$
LANGUAGE plpython3u;
Теперь я хотел бы иметь возможность создать универсальную функцию, определенную как таковую, которая выбирает данные между двумя границами для данного идентификатора и использует предыдущую функцию для выборки данных по отдельности, а затем как-то агрегирует результаты:
CREATE OR REPLACE FUNCTION get_data(id bigint, lbound bigint, ubound bigint)
RETURNS TABLE(oid bigint, id bigint, val double precision) AS
$BODY$
concatenated_recs = [] #<-- For the sake of argument.
plan = plpy.prepare("SELECT oid, id, val FROM _get_data($1, $2);", ['bigint', 'bigint'])
for i in range(lbound, ubound+1):
recs = plpy.execute(plan, [id, i]) # <-- Records fetched individually
concatenated_recs += [recs] #<-- Not sure how to concatenate them...
return concatenated_recs
$BODY$
LANGUAGE plpython3u;