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を使用しています。