正在取消来自 cli 的 运行 查询

Canceling running queries from cli

我正在寻找一种方法来取消当前 运行 来自 cli 的查询。

我找到了这些链接:

不过好像不是我要找的

给定会话 运行 查询的 pid(相应后端进程的进程 ID,您可以在 pg_stat_activity 中找到,或者来自 ps, top, 等等), 你可以使用:

psql -c "SELECT pg_cancel_backend(<your_pid>)"

如果你试图杀死所有满足某些条件的查询(例如那些已经 running/blocking/idle 一段时间的查询,或者那些 运行 针对特定数据库的查询),像这通常很有用:

psql -c "SELECT pg_cancel_backend(pid) FROM pg_stat_activity WHERE <your_conditions>"

您也可以使用 pg_terminate_backend(pid) 断开它们。


要取消最近开始的查询:

SELECT pg_cancel_backend(pid)
FROM pg_stat_activity
WHERE pid <> pg_backend_pid()
ORDER BY query_start DESC
LIMIT 1;

pg_backend_pid() 是您用于 运行 命令的连接;如果没有此过滤器,"latest query" 将是您当前正在执行的过滤器。