database - 杀死一个 postgresql session /连接

标签 database postgresql

如何终止我所有的 postgresql 连接?

我正在尝试 rake db:drop 但我得到:

ERROR:  database "database_name" is being accessed by other users
DETAIL:  There are 1 other session(s) using the database.

我已经尝试关闭从 ps -ef | 中看到的进程grep postgres 但这也不起作用:

kill: kill 2358 failed: operation not permitted

最佳答案

您可以使用 pg_terminate_backend()杀死一个连接。您必须是 super 用户才能使用此功能。这在所有操作系统上都一样。

SELECT 
    pg_terminate_backend(pid) 
FROM 
    pg_stat_activity 
WHERE 
    -- don't kill my own connection!
    pid <> pg_backend_pid()
    -- don't kill the connections to other databases
    AND datname = 'database_name'
    ;

在执行此查询之前,您必须 REVOKE避免新连接的 CONNECT 权限:

REVOKE CONNECT ON DATABASE dbname FROM PUBLIC, username;

If you're using Postgres 8.4-9.1 use procpid instead of pid

SELECT 
    pg_terminate_backend(procpid) 
FROM 
    pg_stat_activity 
WHERE 
    -- don't kill my own connection!
    procpid <> pg_backend_pid()
    -- don't kill the connections to other databases
    AND datname = 'database_name'
    ;

关于database - 杀死一个 postgresql session /连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5108876/

相关文章:

java - MongoDB: "can' t 保存部分对象”异常

c# - 用数据库中的记录填充数据表?

mysql - 以 Linux root 用户身份显示 mysql 数据库

PostgreSQL - 将列数据类型从整数更改为整数数组

postgresql - 根据两个字段过滤行,其中一个字段包含选择条件

postgresql - 是否可以配置 PostgreSQL,使偶尔的大量更新可以超快地运行?

database - Redshift 光谱 - 更新外部光谱表列类型

mysql - 数据库中主键和辅助键的最佳数据结构是什么?

postgresql - Sequelizejs 模式同步不返回

c# - 使用 ASP .NET MVC Identity 应用程序对外部 API (PostgreSQL) 中的用户进行身份验证