【问题标题】:Performance of a SETOF returning function which returns results of another SETOF function?返回另一个 SETOF 函数结果的 SETOF 返回函数的性能?
【发布时间】:2010-08-19 01:42:58
【问题描述】:

我编写了一个函数,它接受两个参数并返回一个 SETOF 结果。

创建函数 foo(parentId bigint, childId bigint) 返回 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_CHILD() 时直接返回FOO() 的结果,还是会在FOO_CHILD() 执行时复制FOO() 的所有结果,然后返回这些结果?

我想我是在问 pgplsql 是否会做尾调用优化!

编辑:我使用的是 Postgres 8.2。

【问题讨论】:

    标签: performance postgresql stored-procedures plpgsql


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-07-25
      • 1970-01-01
      • 2019-11-13
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 2014-04-20
      相关资源
      最近更新 更多