如何找到阻塞另一个查询的查询?
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>);
然后您就会知道哪些会话在阻止您,并且可以终止它们或采取破坏性较小的措施来摆脱它们。
我正在尝试删除一个空的 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>);
然后您就会知道哪些会话在阻止您,并且可以终止它们或采取破坏性较小的措施来摆脱它们。