gpt4 book ai didi

java - 在删除数据库之前检查连接

转载 作者:行者123 更新时间:2023-12-02 05:47:54 25 4
gpt4 key购买 nike

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

如果没有,我可以放弃它。

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

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

从 pg_stat_activity 中选择 count(*)

如何在 Java 中执行此操作?

最佳答案

我不会费心去检查 pg_stat_activity ,因为即使您这样做了,在您启动 DROP DATABASE 之前,有人也可以立即访问数据库。命令。

相反,我建议您只发出 DROP DATABASE使用与 Postgres 交互的任何方法执行命令( JDBCMyBatis 等)并用 try/catch 包围它堵塞。 DROP DATABASE如果有用户连接到该命令,该命令将会失败,因此您可以简单地执行该命令,然后处理异常 - 也许会 hibernate 几秒钟,然后重试,或者类似的效果。

但是,如果您想强制任何 Activity 用户离开数据库,pg_stat_activity将发挥作用,您可以终止它们的后端连接,如下所述:How to drop a PostgreSQL database if there are active connections to it?然后发出DROP DATABASE命令。

编辑以回应OP的评论:

就像我说的,自从 DROP如果有到数据库的连接,命令将失败,我不会先检查,但如果您确实想查看连接是什么(除了您正在使用检查的连接),您可以使用类似的查询上面的链接是什么,只是 pg_terminate_backend打电话。

SELECT *
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB'
AND pid <> pg_backend_pid();

关于java - 在删除数据库之前检查连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23871442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com