FROM 句で複数回レコードを返す関数を呼び出すにはどうすればよいですか? レコードを返す関数を使用する場合、「列定義リスト」を指定する必要があることを理解しています。しかし、その関数のエイリアスを使用するにはどうすればよいでしょうか?
例:
CREATE OR REPLACE FUNCTION foo(which_foo int) RETURNS SETOF RECORD AS
$BODY$BEGIN
IF which_foo=0 THEN
RETURN QUERY EXECUTE 'SELECT 1::int,2::int;';
ELSE
RETURN QUERY EXECUTE 'SELECT 1::int,2::int;';
END IF;
END$BODY$
LANGUAGE plpgsql;
SELECT * FROM foo(0) AS (a int, b int);;
SELECT * FROM foo(1) AS (c int, d int);
SELECT * FROM foo(0) AS (a int, b int), foo(1) AS (c int, d int);
最後の select ステートメントは次のように失敗します。
ERROR: table name "foo" specified more than once
最終的に使用したい関数は可能な限り汎用的でなければならないため、列定義リストを使用し続けたいと考えています。