Postgres-查找打开的游标并关闭它

时间:2018-07-03 04:59:15

标签: postgresql

SQL Server中,我使用以下SQL查找打开的游标并将其关闭在“ catch”块中。

IF EXISTS(SELECT 1 FROM sys.dm_exec_cursors(@@SPID) WHERE [name] = 'Crsr_IDs' AND IS_OPEN = 1)
BEGIN
    CLOSE Crsr_IDs
    DEALLOCATE Crsr_IDs
END

以类似的方式如何在Postgres中的EXCEPTION块中找到具有特定名称的打开游标并将其关闭?

2 个答案:

答案 0 :(得分:1)

您可以将pg_cursors表与打开的游标一起使用:

IF EXISTS(SELECT * FROM pg_cursors WHERE name = 'Crsr_IDs) THEN
  CLOSE Crsr_IDs;
END IF;

但是通常没有必要-如果在受保护的块BEGIN EXCEPTION WHEN END中打开了光标,则异常处理程序会自动关闭打开的光标。

答案 1 :(得分:1)

您可以使用pg_cursors目录在会话中查询打开的游标,但是请注意,某些游标可能已被系统打开。

通常,您使用CLOSE ALL关闭所有打开的游标。