微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在尝试删除一张空桌子 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>);

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。