POSTGRES:pg_cancel_backend并不总是有效(其原因)

时间:2018-09-09 12:33:44

标签: postgresql postgresql-9.3 postgresql-9.4

我目前正在使用postgres作为数据库引擎,该引擎已连接到Web应用程序。

在某些情况下,我注意到数据库中积累了一些锁,主要是AccessSharedLocks(运行查询时:从pg_locks中选择*)。

我注意到的一件事是,要取消获取锁的进程,可以使用pg_cancel_backend(pid),但有时我意识到这并不总是有效的!我很好奇为什么。是此函数将SIGINT发送到数据库以正常关闭它吗?意味着它不会立即将其关闭?

有pg_terminate_backend,但我不想使用它。

任何有关pg_cancel_backend为什么间歇性工作的建议(或至少有一些解释)都将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:0)

pg_cancel_backendpg_terminate_backend向进程发送信号。

后端经常检查未决的中断,但是有可能发生在执行需要一段时间的地方。

取消查询直到交易关闭后才会摆脱。