返回多个表的postgresql存储过程
我有一个函数需要从多个表返回结果。现在在Postgresql 9.1中是否可以这样做,并计划很快迁移到9.2?如果是,如何进行 比如说返回多个表的postgresql存储过程,postgresql,plpgsql,Postgresql,Plpgsql,我有一个函数需要从多个表返回结果。现在在Postgresql 9.1中是否可以这样做,并计划很快迁移到9.2?如果是,如何进行 比如说 create or replace function f1() returns ??? as $body$ begin return query select x.* from users x; return query select x.* from user_preferences x join users y
create or replace function f1()
returns ???
as $body$ begin
return query select x.*
from users x;
return query select x.*
from user_preferences x join users y using(user_id) ; -- more where clauses
return query select x.*
from user_permissions x join users y using(user_id) ; -- more clauses
end; $body$ language 'plpgsql';
我考虑的备选方案是:做用户和用户偏好的笛卡尔乘积等,但这将导致巨大的结果表和真正复杂的代码。b首先对用户进行选择,然后迭代用户列表,并根据用户的属性进行额外的迭代,但这将导致太多的数据库调用。而且,我为什么要编写SQL如此擅长的代码呢
是否有一种简洁的方法可以从pg函数中获得多个结果集?我已经搜索了postgresql文档,但找不到任何指导
非常感谢。因为在编写本文时,Pg不支持存储过程,只支持从SQL调用的函数,所以没有直接返回多个结果集的规定 但是,可以将函数定义为返回集合refcursor。该函数可以创建多个临时表,为每个表打开一个游标并返回游标
这有点笨拙,但很有效。因为在编写本文时,Pg不支持存储过程,只支持从SQL调用的函数,所以没有直接返回多个结果集的规定 但是,可以将函数定义为返回集合refcursor。该函数可以创建多个临时表,为每个表打开一个游标并返回游标 这有点笨拙,但很有效