phpPgAdmin的:它是如何踢出来的用户的Postgres的,所以它可以db_drop?

StackOverflow https://stackoverflow.com/questions/2432555

  •  19-09-2019
  •  | 
  •  

我有一个Posgresql数据库(我的老板),我想放弃它,并从转储重新创建它。

但问题是,有是定期访问数据库几个应用程序(两个网站,导轨和Perl)。所以我得到一个“数据库被其他用户访问”错误。

我读过一个可能性越来越涉及进程的PID和单独杀死他们。我想做些什么清洁剂,如果可能的话。

phpPgAdmin的,似乎做我想做的:我能放下使用其Web界面模式,即使在网站上,没有得到错误。所以,我研究它的代码是如何工作的。不过,我没有PHP的专家。

我想了解,以便看看它是如何做它的phpPgAdmin的代码。我发现线(在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()是未知的,并且你必须杀死在OS水平的过程。


要迅速下降连接到给定数据库的所有连接,该快捷方式很好地工作。必须运行超级用户身份:

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';

其他提示

不知道关于PostgreSQL的,但我认为一个可能的解决办法是锁定表,当他们尝试访问它的其他进程将失败。

请参阅: http://www.postgresql.org/docs/current/static/ SQL-lock.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top