gpt4 book ai didi

PostgreSQL JDBC 套接字超时不会终止后台进程

转载 作者:行者123 更新时间:2023-11-29 12:56:50 24 4
gpt4 key购买 nike

我正在使用 JDBC 对我的 PostgreSQL 数据库运行查询。当查询花费的时间太长时,我希望它们死掉。我设置了 socketTimeout(如下所示),它确实成功终止了连接,但是如果我查看 PostgreSQL 服务器上的 pg_stat_activity,查询通常会继续运行(对于 up到几分钟)。

我的代码看起来有点像这样:

Properties props = new Properties();
props.setProperty("user", datasource.getUsername());
props.setProperty("password", datasource.getPassword());
props.setProperty("socketTimeout", ""+(timeoutSeconds));
props.setProperty("loginTimeout", "10");
conn = datasource.getDbType().getDriver().connect(url, props);
conn.setReadOnly(true);
conn.setAutoCommit(false);
PreparedStatement statement = conn.prepareStatement(sql);
return statement.executeQuery();

我的假设是 socketTimeout 实际上只是终止连接,而不是 postgres 服务器上正在运行的进程。即,此超时是驱动程序端而不是 PostgreSQL 端。

有没有一种方法可以设置超时(在每个语句级别),这实际上会使 PostgreSQL 在给定的超时后终止查询本身?

注意:到目前为止,我找到了一种解决方案,即在给定超时后明确取消查询(即使用 statement.cancel())。这可行,但并不理想,因为如果我的服务器死机,那么没有人会终止正在运行的查询。

最佳答案

你应该设置statement_timeout .

关于PostgreSQL JDBC 套接字超时不会终止后台进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41146259/

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