Выполнение функции возврата SETOF, которая возвращает результаты другой функции SETOF? - PullRequest
1 голос
/ 18 августа 2010

Я написал функцию, которая принимает два аргумента и возвращает результат 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.

1 Ответ

0 голосов
/ 18 августа 2010

plpgsql всегда материализует результаты перед возвратом, поэтому нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...