簡単な例を考えてみましょう:
postgres=# create function foofunc() returns table(a int, b text) language sql as $$ select 1, 'a'::text $$;
postgres=# select foofunc();
╔═════════╗
║ foofunc ║
╠═════════╣
║ (1,a) ║
╚═════════╝
関数が列/変数コンテキストで呼び出されると、指定された戻り型の単一の値が返されます。エラーの原因は次のとおりです。ビューのselect
1つの列のみを返します。
ただし、関数がテーブルコンテキストで呼び出されると、真のテーブルのように値が返されます。
postgres=# select * from foofunc();
╔═══╤═══╗
║ a │ b ║
╠═══╪═══╣
║ 1 │ a ║
╚═══╧═══╝
したがって、ビューを作成するときは、2番目のアプローチを使用する必要があります。
CREATE VIEW v1 (c1, c2, c3, c4, c5) AS
SELECT * FROM f1 (1, 2);