POSTGRES:pg_cancel_backend并不总是有效(背后的原因)

问题描述 投票:0回答:1

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

我在某些情况下已经注意到数据库中存在锁定,主要是访问共享锁(运行查询时:select * from pg_locks)。

我注意到的一件事是,要取消获取锁定的进程,您可以使用pg_cancel_backend(pid),但有时我意识到这并不总是有效!而且我很想知道为什么。这个函数是否将SIGINT发送到数据库以正常关闭它?意思是它不会立即关闭它?

有pg_terminate_backend,但我更喜欢不使用它。

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

谢谢。

postgresql postgresql-9.3 postgresql-9.4
1个回答
0
投票

pg_cancel_backendpg_terminate_backend向该过程发送信号。

后端经常检查挂起的中断,但是可能会发生执行处于需要一段时间直到发生这种情况的地方。

在事务关闭之前,取消查询不会消除锁定。

© www.soinside.com 2019 - 2024. All rights reserved.