2010-08-18 81 views
1

我写了一个函数,它带有两个参数并返回一个SETOF结果。返回另一个SETOF函数结果的SETOF返回函数的性能?

CREATE函数foo(parentId的BIGINT,childID的BIGINT) RETURNS SETOF酒吧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会做tail-call优化!

编辑:我使用Postgres 8.2。

回答

0

plpgsql总是在返回前实现结果,所以没有。