我在PostgreSQL中有一个脚本,每晚都会从转储中恢复测试数据库.应用程序服务器和具有连接池的进程可以访问数据库,从而始终保持一些连接处于活动状态.
所以脚本恢复转储my_temp_database
.那么它应该改名my_database
来my_old_database
,my_temp_database
来my_database
,并最终下降my_old_database
.
如何断开所有客户端,超级用户与否my_database
,以便可以重命名?我怎么能暂时阻止他们重新连接?
有没有更好的方法来做我需要的?
ara*_*nid 30
To mark database 'applogs' as not accepting new connections:
update pg_database set datallowconn = false where datname = 'applogs';
Run Code Online (Sandbox Code Playgroud)
Another possibility would be to revoke 'connect' access on the database for the client role(s).
Disconnect users from database = kill backend. So to disconnect all other users from "applogs" database, for example:
select pg_terminate_backend(procpid)
from pg_stat_activity
where datname = 'applogs' and procpid <> pg_backend_pid();
Run Code Online (Sandbox Code Playgroud)
Once you've done both of those, you are the only user connected to 'applogs'. Although there might actually be a delay before the backends actually finish disconnecting?
终止当前活动连接后,您还可以发出此命令,该命令仅允许超级用户登录.这假设您可以访问所有仍具有访问权限的超级用户.希望您不会向任何人分发超级用户权限.
ALTER DATABASE your_db CONNECTION LIMIT 0;
Run Code Online (Sandbox Code Playgroud)
从 PostgreSQL 9.5 开始,我们终于可以:
ALTER DATABASE db WITH ALLOW_CONNECTIONS false;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16176 次 |
最近记录: |