在PostgreSQL中,如果一个库正在被使用,我们是无法直接去删除的,会收到如下报错:postgres=#drop database demodb;
postgres=#drop database demodb;
ERROR: database "demodb" is being accessed by other users
DETAIL: There is 1 other session using the database.
不管是在命令行还是使用工具,我们都无法正常删除相应的数据库,这是postgresql的安全机制,正在使用有进程存在的数据库不能直接删除,出现这种情况建议重新创建一个数据库,把之前的数据备份,然后导入到新的数据库中。
在所有情况都允许的情况下又不得不删除原来的数据库,那么我们可以使用下面的方法来进行操作:
首先我们需要禁止会话再连接到库中,同时中断掉当前所有连接的会话才可以。
登录到数据库中
psql -U 用户名
在postgresql数据库命令行模式下进行操作postgres=#
1、设置数据库为禁止连接
UPDATE pg_database SET datallowconn = 'false' WHERE datname = 'db_name';
2、中断当前库中所有连接会话
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'db_name';
3、最后执行删除命令
drop database db_name;
注意!
最后提示 :“删库有风险,需谨慎操作!”