执行DROP DATABASE时出现database is being accessed by other users,往往是应用连接池、管理工具或后台会话仍连着目标库。这是保护性的阻止条件,不能把强制当成第一步。
先确认目标库名称、备份和业务窗口,再从另一个数据库检查谁还在使用它。

为什么删除会被拒绝
PostgreSQL不允许在仍有其他连接的情况下直接删除数据库,而且DROP DATABASE不能在事务块中执行。操作会移除整个数据库,不可把它当作清理单张表的命令。先核对当前连接所在库,避免在应用库里执行维护命令。
先看连接来自哪里
连接到postgres等其他数据库后,查询SELECT pid, usename, application_name, client_addr, state FROM pg_stat_activity WHERE datname = '目标库';。这只列出当前观察到的会话,连接池可能马上重建连接。先停应用写入、作业和健康检查,再考虑终止会话,否则删库窗口难以稳定。
FORCE会做什么
官方的DROP DATABASE 目标库 WITH (FORCE);会尝试终止当前用户有权限终止的连接,然后删除数据库。它不是无条件清空所有阻碍:目标库存在预备事务、活动逻辑复制槽或订阅时仍可能失败。FORCE会打断其他会话,务必在维护窗口、备份核验后使用。
更稳妥的处理顺序
先暂停连接源并确认备份可恢复,再查pg_stat_activity。连接已退出时,直接执行普通DROP DATABASE;只有业务已停、连接仍残留且具备权限时,才考虑FORCE。云数据库托管环境还要确认账号权限和服务商的备份策略;在萤光云或LightNode自建PostgreSQL时,操作前同样应保留可验证的数据库备份。
报错未消失怎么定位
核对报错中的数据库名和查询条件,检查定时任务、迁移工具、连接池及监控探针。若FORCE仍失败,记录服务器返回的具体阻碍,再检查预备事务及复制相关对象。不要循环运行删库命令来碰运气,更不要把错误库名改成实际生产库名尝试。
验收方式
执行后用SELECT datname FROM pg_database WHERE datname = '目标库';确认无结果,并核对业务记录中该库确为计划删除对象。若需要重建,先验证备份恢复流程;删除成功不等于备份可恢复。
FAQ
能在目标库里执行DROP DATABASE吗?不能,需连接到其他数据库。FORCE是否一定成功?不是,它受权限、预备事务和复制状态等条件限制。
温馨提示
删除数据库是不可逆的生产变更。请在维护窗口完成审批、备份、连接源关闭和目标库复核,先保留恢复路径,再执行删除。


