1

2つの引数を取り、SETOFの結果を返す関数を作成しました。

CREATE FUNCTION foo(parentId bigint、childId bigint)RETURNS SETOF barAS..。

この関数の呼び出しを簡単にする2つの「ラッパー」を作成したいと思います。

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;

FOO()postgresは、が呼び出されたときの結果を直接返すのに十分スマートですか、それとも実行中FOO_CHILD()にすべての結果をコピーしてからそれらの結果を返しますか?FOO()FOO_CHILD()

pgplsqlが末尾呼び出しの最適化を行うかどうかを尋ねていると思います!

編集:私はPostgres8.2を使用しています。

4

1 に答える 1

0

plpgsqlは常に結果を返す前に実体化するので、いいえ。

于 2010-08-18T17:42:58.320 に答える