Помислете за простия пример:
postgres=# create function foofunc() returns table(a int, b text) language sql as $$ select 1, 'a'::text $$;
postgres=# select foofunc();
╔═════════╗
║ foofunc ║
╠═════════╣
║ (1,a) ║
╚═════════╝
Когато функцията е извикана в контекста на колона/променлива, тя връща единствената стойност от посочения тип на връщане. Ето източника на грешката:select
на изгледа връща само една колона.
Въпреки това, ако функцията е извикана в контекста на таблицата, тя връща стойностите като истинска таблица:
postgres=# select * from foofunc();
╔═══╤═══╗
║ a │ b ║
╠═══╪═══╣
║ 1 │ a ║
╚═══╧═══╝
Така че трябва да използвате втория подход, когато създавате изгледа:
CREATE VIEW v1 (c1, c2, c3, c4, c5) AS
SELECT * FROM f1 (1, 2);