我编写了一个带有两个参数并返回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。答案 0 :(得分:0)
plpgsql总是在返回之前实现结果,所以没有。