gpt4 book ai didi

phppgadmin : How does it kick users out of postgres, 所以它可以db_drop?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:00:09 25 4
gpt4 key购买 nike

我有一个 Posgresql 数据库(我是所有者),我想删除它并从转储中重新创建它。

问题是,有几个应用程序(两个网站,rails 和 perl)定期访问数据库。所以我收到“其他用户正在访问数据库”错误。

我读到过一种可能性是获取所涉及进程的 pids 并单独杀死它们。如果可能的话,我想做一些更清洁的事情。

Phppgadmin 似乎做我想做的事:我可以使用它的 Web 界面删除模式,即使在网站打开时,也不会出现错误。所以我正在研究它的代码是如何工作的。但是,我不是 PHP 专家。

我正在尝试理解 phppgadmin 代码,以便了解它是如何工作的。我发现了 a line (Schemas.php 中的 257)它说:

$data->dropSchema(...)

$data 是一个全局变量,我找不到它的定义位置。

如有任何指点,我们将不胜感激。

最佳答案

首先,找到所有当前使用您的数据库的 procesid:

SELECT usename, procpid FROM pg_stat_activity WHERE datname = current_database();

其次,杀死你不想要的进程:

SELECT pg_terminate_backend(your_procpid);

这从 8.4 版开始有效,否则 pg_terminate_backend() 是未知的,您必须在操作系统级别终止进程。


要快速删除连接到给定数据库的所有连接,此快捷方式效果很好。必须以 super 用户身份运行:

SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname='YourDB';

在较新的 Postgres 版本中(至少 9.2+,可能更早),列名已更改且查询为:

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='YourDB';

关于phppgadmin : How does it kick users out of postgres, 所以它可以db_drop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2432555/

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