我试图删除一个数据库,但当我试图删除它时,我得到了这个错误:
错误:其他用户正在访问数据库"mydb">
详细信息:有24个其他会话正在使用该数据库。
我只想删除它,这样我就可以从备份中恢复它。基于另一个线程,我尝试了这个:
REVOKE CONNECT ON DATABASE mydb FROM public;
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'mydb';
这没用。我仍然收到错误消息有会话。
数据库中有两个模式,public
和hangfire
,所以我不确定这是否是问题的原因。
这是我的本地数据库,没有其他人在使用它。为什么它不删除?
解决方案为:
UPDATE pg_database SET datallowconn = 'false' WHERE datname = 'mydb';
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'mydb';
DROP DATABASE mydb;
您仍然获得一些连接的原因可能是这些用户已被授予对数据库的显式权限。
它很可能是数据库的所有者。您必须明确地撤销所有者的连接权限。