我目前正在使用postgres作为数据库引擎,该引擎已连接到Web应用程序。
在某些情况下,我注意到数据库中积累了一些锁,主要是AccessSharedLocks(运行查询时:从pg_locks中选择*)。
我注意到的一件事是,要取消获取锁的进程,可以使用pg_cancel_backend(pid),但有时我意识到这并不总是有效的!我很好奇为什么。是此函数将SIGINT发送到数据库以正常关闭它吗?意味着它不会立即将其关闭?
有pg_terminate_backend,但我不想使用它。
任何有关pg_cancel_backend为什么间歇性工作的建议(或至少有一些解释)都将不胜感激。
谢谢。
答案 0 :(得分:0)
pg_cancel_backend
和pg_terminate_backend
向进程发送信号。
后端经常检查未决的中断,但是有可能发生在执行需要一段时间的地方。
取消查询直到交易关闭后才会摆脱。