返回TABLE和SETOF记录的函数有什么区别,其他所有的相等.
CREATE FUNCTION events_by_type_1(text) RETURNS TABLE(id bigint,name text) AS $$ SELECT id,name FROM events WHERE type = $1; $$LANGUAGE sql STABLE; CREATE FUNCTION events_by_type_2(text) RETURNS SETOF record AS $$ SELECT id,name FROM events WHERE type = $1; $$LANGUAGE sql STABLE;
解决方法
当返回SET OF记录时,输出列不输入并未命名.因此,此表单不能直接在FROM子句中使用,就好像它是一个子查询或表.
也就是说,当发行时:
SELECT * from events_by_type_2('social');
我们得到这个错误:
ERROR: a column definition list is required for functions returning
“record”
它可以通过sql调用者“转换”到正确的列类型.此表单可以正常工作:
SELECT * from events_by_type_2('social') as (id bigint,name text);
并得出:
id | name ----+---------------- 1 | Dance Party 2 | Happy Hour ...
为此,SET OF记录被认为不太实际.仅当提前不知道结果的列类型时才使用它.