SETOF返回函数的性能,它返回另一个SETOF函数的结果?

时间:2010-08-18 17:31:00

标签: performance postgresql stored-procedures plpgsql

我编写了一个带有两个参数并返回SETOF结果的函数。

CREATE FUNCTION 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是否会进行尾调用优化!

编辑:我正在使用Postgres 8.2。

1 个答案:

答案 0 :(得分:0)

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