1

我编写了一个函数,它接受两个参数并返回一个 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。

4

1 回答 1

0

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

于 2010-08-18T17:42:58.320 回答