在丢弃DB之前检查连接

时间:2014-05-26 13:37:38

标签: java database postgresql

我试图放弃数据库。在删除数据库之前,我只想检查是否有任何客户端连接到该特定数据库。

如果不是,我可以放弃它。

如果是,我想向用户提供一些有用的信息。

我知道这个查询,所以我可以看到与该数据库建立的数字连接。

select count(*) from pg_stat_activity

我怎样才能用Java做到这一点?

1 个答案:

答案 0 :(得分:2)

我不打扰检查pg_stat_activity,因为即使您这样做,也可以在您启动DROP DATABASE命令之前立即访问数据库。

相反,我建议您使用与DROP DATABASEPostgresJDBC等进行互动时使用的任何方法发出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}}