如何找到阻止另一个查询的查询?

我正在尝试删除drop table temp;查询永远运行的空表

因此,我试图找到可能阻止当前查询的其他查询。这是我尝试过的:

SELECT *
  FROM pg_locks l
  JOIN pg_class t ON l.relation = t.oid AND t.relkind = 'r'
 WHERE t.relname = 'temp';

此查询返回零结果

SELECT database, gid FROM pg_prepared_xacts;

这也没有给出任何结果。

该表是一个分区表,附加在该表上的分区已经被成功删除。

我什至无法获得d temp.

发生了什么事?我怎样才能解决这个问题?

当我在本地尝试相同时,这不会发生。工作得很好。

回答

运行前DROP TABLE,执行

SELECT pg_backend_pid();

这将告诉您后端进程 ID。然后DROP TABLE 在同一个数据库会话中运行。

然后,当DROP TABLE挂起时,启动一个新会话并运行

SELECT pg_blocking_pids(<backend PID>);

然后您就知道哪些会话在阻止您,并且可以杀死它们或采取较少破坏性的措施来摆脱它们。


以上是如何找到阻止另一个查询的查询?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>