Hãy xem xét ví dụ đơn giản:
postgres=# create function foofunc() returns table(a int, b text) language sql as $$ select 1, 'a'::text $$;
postgres=# select foofunc();
╔═════════╗
║ foofunc ║
╠═════════╣
║ (1,a) ║
╚═════════╝
Khi một hàm được gọi trong ngữ cảnh cột / biến, nó trả về một giá trị duy nhất của kiểu trả về được chỉ định. Đây là nguồn gốc của lỗi:select
của chế độ xem chỉ trả về một cột.
Tuy nhiên, nếu hàm được gọi trong ngữ cảnh bảng thì nó trả về các giá trị giống như một bảng true:
postgres=# select * from foofunc();
╔═══╤═══╗
║ a │ b ║
╠═══╪═══╣
║ 1 │ a ║
╚═══╧═══╝
Vì vậy, bạn nên sử dụng cách tiếp cận thứ hai khi tạo chế độ xem:
CREATE VIEW v1 (c1, c2, c3, c4, c5) AS
SELECT * FROM f1 (1, 2);