【发布时间】:2015-12-16 06:23:26
【问题描述】:
所以,这是我遇到过几次的问题——我会不小心从一个巨大的数据库中执行 SELECT *。通常,我只是进去,获取查询的 pid (SELECT * FROM pg_stat_activity),然后执行 SELECT pg_cancel_backend(PID here),瞧,它就结束了。但有时——尤其是最终会产生大量行的查询——它只是返回:
db=# select pg_cancel_backend(5246);
pg_cancel_backend
-------------------
t
(1 row)
...查询继续存在!我如何杀死这些东西??
【问题讨论】:
-
如果你在 Unix 上,你可能需要
kill -9 <pid>。每隔一段时间我就会得到其中一个。 -
你当然可以杀死 -9 后端,但这应该是绝对的最后手段,因为它最终会破坏数据库。如果发生这种情况,在将事务日志前滚到最后一个好点时,可能需要很长时间才能重新启动。
标签: postgresql