gpt4 book ai didi

postgresql - Postgres 数据库锁定 : Queries running forever

转载 作者:行者123 更新时间:2023-11-29 11:14:26 24 4
gpt4 key购买 nike

我的一个 Python 脚本在 Postgres 数据库上运行了一些 ALTER TABLE 查询。出了点问题, table 被锁住了。当我对这些表中的任何一个运行任何查询时,它会告诉我查询正在运行,但没有任何反应。目前,我只能通过关闭系统并重新启动来解除此锁定。请告诉我一个更好的方法。这是 Windows 主机。

最佳答案

你应该检查锁:

SELECT l.*,a.*
FROM pg_locks l
JOIN pg_stat_activity a USING (pid)
WHERE NOT granted;

您会看到一个正在等待 session 的列表。以及以下内容:

SELECT l.*,a.*
FROM pg_locks l
JOIN pg_stat_activity a USING (pid)
WHERE granted
AND (database,relation) IN (SELECT database,relation
FROM pg_locks WHERE NOT granted);

会给你一个阻塞 session 的列表。如果你使用 psql, use expanded output获取每行的列输出,更好地查看此类信息。

The following SQL script将显示阻塞树(如果有被阻塞的 session ),每个分支顶部的 session (是的,通常有多个分支)将是阻塞的。

我建议你也看看this wiki page这个问题:Postgresql DROP TABLE doesn't work(尽管它在那里谈到了 DROP TABLE,但它可能会有所帮助)。

对于您的情况,我建议识别阻塞 session 并尝试找出它们阻塞的原因。根据我的经验,最典型的案例是有人在 COMMIT 之后忘记按回车键,然后出去吃午饭了。如果您确定这不会损害您的系统,您可以终止阻塞 session :

SELECT pg_terminate_backend(pid);

关于postgresql - Postgres 数据库锁定 : Queries running forever,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26596566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com