Я написал функцию, которая принимает два аргумента и возвращает результат SETOF.
CREATE FUNCTION foo (parentId bigint, childId bigint) ВОЗВРАЩАЕТ SETOF bar AS ...
Я хотел бы написать две «обертки» для этой функции, которые упростят вызов:*
CREATE FUNCTION foo_parent(parentId bigint)
RETURNS SETOF bar AS
...
BEGIN
RETURN QUERY SELECT * FROM foo(parentId, NULL);
END;
CREATE FUNCTION foo_child(childId bigint)
RETURNS SETOF bar AS
...
BEGIN
... look up parent ID ...
RETURN QUERY SELECT * FROM foo(parentId, childId);
END;
Достаточно ли уместен postgres для непосредственного возврата результата FOO()
при вызове FOO_CHILD()
, или он скопирует все результаты из FOO()
во время выполнения FOO_CHILD()
, а затем вернет эти результаты?
Я думаю, что спрашиваю, будет ли pgplsql выполнять оптимизацию хвостового вызова!
РЕДАКТИРОВАТЬ: я использую Postgres 8.2.