作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 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/
我是一名优秀的程序员,十分优秀!