JDBC postgres查询超时

时间:2009-07-24 00:07:54

标签: postgresql jdbc

不幸的是,没有为JDBC / postgres实现setTimeout。有什么方法可以模拟或解决这个问题吗?从功能上来说,我想执行查询,然后如果花费的时间超过N秒则中断

4 个答案:

答案 0 :(得分:19)

"statement_timeout"看起来像你想要的。

SET statement_timeout TO 1000; -- for a second
<your_query_here>;
RESET statement_timeout; -- reset

答案 1 :(得分:1)

一种方法可能是尝试在Timer类中运行查询。如果Timer结束而没有返回值,则抛出异常。

HibernateJDO提供了这样的结构。也许他们会成为你的好选择。

答案 2 :(得分:0)

如果您将c3p0用于数据源,该怎么办?它有许多可配置的选项,对于不稳定的数据库和网络,例如,acquireRetryAttempts,acquireRetryDelay和breakAfterAcquireFailure。

答案 3 :(得分:0)

使用LOCAL关键字将statement_timeout的范围限制为当前事务。这样,如果出现任何问题(例如超时),超时就会重置。

BEGIN TRANSACTION;
SET LOCAL statement_timeout TO 1000;    -- one-second timeout
SELECT COUNT(*) FROM really_huge_table; -- your slow query
ROLLBACK;                               -- reset