我编写了一个函数,它接受两个参数并返回一个 SETOF 结果。
CREATE FUNCTION foo(parentId bigint, childId bigint) RETURNS 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()
whenFOO_CHILD()
被调用的结果,还是会从FOO()
whileFOO_CHILD()
执行中复制所有结果,然后返回这些结果?
我想我是在问 pgplsql 是否会进行尾调用优化!
编辑:我正在使用 Postgres 8.2。