不幸的是,没有为JDBC / postgres实现setTimeout。有什么方法可以模拟或解决这个问题吗?从功能上来说,我想执行查询,然后如果花费的时间超过N秒则中断
答案 0 :(得分:19)
"statement_timeout"看起来像你想要的。
SET statement_timeout TO 1000; -- for a second
<your_query_here>;
RESET statement_timeout; -- reset
答案 1 :(得分:1)
答案 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