是否需要从存储的plpgsql函数中关闭返回的refcursor?

时间:2018-10-21 10:47:22

标签: postgresql plpgsql database-cursor

使用PostgreSQL,我使用以下结构存储函数:

create or replace function myfunc() returns refcursor as $$
declare rc refcursor := 'mycursor';
-- ...
begin;
    -- ...
    open rc for select ...;
    return rc;
end; $$ language plpgsql;

这将返回我在强制性事务中使用的游标。我正在这样使用:

begin;
select myfunc();
fetch all in mycursor;
close mycursor;
commit;

但是在大​​多数示例和教程中,语句close mycursor;只是被省略了。 我知道您在函数内部使用它时需要关闭它,但是当返回它时,也许commit;自动关闭所有打开的游标吗? 那么,关闭游标真的有必要吗?

由于光标不再在范围内,因此不确定如何检查commit;之后它是否仍然打开。

1 个答案:

答案 0 :(得分:2)

mention in the docs

  

CLOSE关闭打开的游标下面的门户。可以用于在事务结束之前释放资源,或释放光标变量以再次打开。

您可以将close cursor_name用于releasing resources earlier than end of transaction,因此,如果您不关闭游标,而endcommit则关闭交易,则完全没有关系。