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

How to find the queries that is blocking another query?

我正在尝试删除一个空的 table 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';

此查询 returns 结果为零

SELECT database, gid FROM pg_prepared_xacts;

这也没有给出任何结果。

table 是分区的 table,已成功删除附加到 table 的分区。

我什至无法获得 \d temp 的结果。

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

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

在运行宁DROP TABLE之前,执行

SELECT pg_backend_pid();

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

然后,当DROP TABLE挂起时,开始一个新的session并且运行

SELECT pg_blocking_pids(<backend PID>);

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