Запись данных в целевую таблицу, полученных из другой функции greenplum
Имеется функция, которая выполняет какие то расчеты с использованием select из таблиц БД. Она работает отлично. Например:
CREATE OR REPLACE FUNCTION udr.f_uno(p_per int4, p_uno_b int4, p_uno_e int4)
RETURNS TABLE (calmonth int4, month_dep int4, etrid varchar, uno int4, nvag int4, sto int4, stn int4, otchdor int4, iddos int4, dtoo timestamp, dtro timestamp, month_poezd int4, poezd numeric, kodst int4, min_dtop_t timestamp, max_dtop_t timestamp, type_oper text)
LANGUAGE plpgsql
VOLATILE
AS $$
DECLARE
-- part_val numeric;
BEGIN
return query
SELECT dd.calmonth,
dd.monthpo,
dd.etrid,
dd.uno,
dd.nvag,
dd.sto,
dd.stn,
dd.otchdor,
dd.iddos,
dd.dtoo,
dd.dtro,
zgo2n.calmonth::int4 AS month_poezd,
zgo2n.go_poezd AS poezd,
0 AS kodst,
zgo2n.min_dtop_t,
zgo2n.max_dtop_t,
''::text AS type_oper
FROM udr.dd2 dd
LEFT JOIN udr.zgo2n zgo2n
ON dd.calmonth::numeric = zgo2n.monthgo AND dd.uno::numeric = zgo2n.uno AND dd.etrid::text = zgo2n.etrid::text
where dd.calmonth = p_per and
dd.uno between p_uno_b and p_uno_e;
end;
$$
EXECUTE ON ANY;
Также есть другая функция, где происходит вызов первой функции с записью результата в целевую таблицу.
CREATE OR REPLACE FUNCTION udr.f_save_uno_gp3(p_per int4, p_uno_b int4, p_uno_e int4)
RETURNS void
LANGUAGE plpgsql
VOLATILE
AS $$
DECLARE
begin
insert into udr.unogp2 (calmonth, uno)
SELECT calmonth,
uno
from udr.f_uno(p_per, p_uno_b, p_uno_e);
return;
end;
$$
EXECUTE ON ANY;
При вызове второй функции мы получаем ошибку: function cannot execute on a QE slice because it accesses relation udr.dd2
Вызываю так: SELECT * from udr.f_save_uno_gp3(202308, 1414756420, 1414756420);
Как в функции записать результаты работы другой функции?
Использую: PostgreSQL 9.4.26 (Greenplum Database 6.23.1 build commit:2731a45ecb364317207c560730cf9e2cbf17d7e4 Open Source) on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 6.4.0, 64-bit compiled on Feb 7 2023 22:54:40