2010-08-18 80 views
1

我寫了一個函數,它帶有兩個參數並返回一個SETOF結果。返回另一個SETOF函數結果的SETOF返回函數的性能?

CREATE函數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會做tail-call優化!

編輯:我使用Postgres 8.2。

回答

0

plpgsql總是在返回前實現結果,所以沒有。