我试图放弃数据库。在删除数据库之前,我只想检查是否有任何客户端连接到该特定数据库。
如果不是,我可以放弃它。
如果是,我想向用户提供一些有用的信息。
我知道这个查询,所以我可以看到与该数据库建立的数字连接。
select count(*) from pg_stat_activity
我怎样才能用Java做到这一点?
答案 0 :(得分:2)
我不打扰检查pg_stat_activity
,因为即使您这样做,也可以在您启动DROP DATABASE
命令之前立即访问数据库。
相反,我建议您使用与DROP DATABASE
(Postgres
,JDBC
等进行互动时使用的任何方法发出MyBatis
命令。 )并用try/catch
块包围它。如果有用户连接到DROP DATABASE
命令,那么pg_stat_activity
命令就会失败,因此您只需执行命令然后处理异常 - 也许可以睡几秒钟然后重试,或者出现这种情况。
但是,如果您希望强制任何活跃用户离开数据库,DROP DATABASE
将会发挥作用,您可以终止其后端连接,如下所述:{{3}然后发出DROP
命令。
根据OP的评论进行编辑:
就像我说的那样,因为如果有与DB的连接,pg_terminate_backend
命令会失败,我不会先打扰检查,但如果你真的想知道连接是什么(除了您已经使用支票进行了连接),您可以使用与上述链接中的内容类似的查询,只需使用SELECT *
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB'
AND pid <> pg_backend_pid();
来电。
{{1}}