终止一个postgresql会话/连接

8 浏览
0 Comments

终止一个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

admin 更改状态以发布 2023年5月20日
0
0 Comments

也许只需要重新启动postgres => sudo service postgresql restart

0
0 Comments

你可以使用 pg_terminate_backend() 来终止一个连接。必须具备超级用户权限才能使用这个函数。该函数在所有操作系统上的使用方式都是一样的。

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;

如果你正在使用Postgres8.4-9.1,请使用 procpid而不是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'
    ;

0