删除 PostgresSql 数据库 报错:有 N 个其它会话正在使用数据库 的解决方案-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

删除 PostgresSql 数据库 报错:有 N 个其它会话正在使用数据库 的解决方案

简介: 遇到的问题 在PostgreSQL 9.2 及以上版本,执行下面的语句: postgres=# drop database dbtest; # 执行删除指定数据库的时候,报以下错误 ERROR: database "dbtest" is being accessed by other users DETAIL: There is 2 other session using the database. 或者使用 Navicat 等第三方数据库连接工具,删除指定数据库的时候报错,说明此时有两个客户端在连接此数据库,此时不能删除数据库。

如果确定要强制删除此数据库,那么执行如下命令:

postgres=# SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE datname='数据库名' AND pid<>pg_backend_pid();
pg_terminate_backend
----------------------
t
t
t
(3 rows)

执行上面的语句之后,在执行DROP操作,就可以删除数据库了。

上面语句说明:

pg_terminate_backend:用来终止与数据库的连接的进程id的函数。
pg_stat_activity:是一个系统表,用于存储服务进程的属性和状态。
pg_backend_pid():是一个系统函数,获取附加到当前会话的服务器进程的ID。

此时再执行删除数据库的操作:

postgres=# drop database 数据库名;
DROP DATABASE

强制删除数据库成功!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章
最新文章
相关文章