У меня есть соединение с БД PostgreSQL (с помощью драйвера JDBC PostgreSQL), и я установил для него сетевое время ожидания (с помощью метода setNetworkTimeout
), и в этом есть что-то странное.
Когда я использую соединение для простых запросов, таких как select * from table
, что занимает много времени, оно работает нормально (ждет, пока запрос вернет результат). Но , когда я использую соединение для запросов, использующих функции (например, select max(a) from table
), которые также занимают много времени, в результате тайм-аута возникает исключение.
пример кода:
// Queries which takes more than 5 seconds
String bigQuery = "select * from data.bigtable tb1 inner join data.bigtable tb2 on tb1.a like '%a%'";
String bigQueryWithFunction = "select max(tb1.a) from data.bigtable tb1 inner join data.bigtable tb2 on tb1.a like '%a%'";
// Creating a connection with 5 seconds network timeout
Connection con = source.getConnection();
con.setNetworkTimeout(Executors.newSingleThreadExecutor(), 5000);
con.setAutoCommit(false);
Statement st2 = con.createStatement();
st2.execute(bigQueryWithFunction); // This line DOES throws an exception
st2.execute(bigQuery); // This line DOES NOT throws an exception
(Игнорировать логику запросов.)
Может кто-нибудь объяснить мне, почему это происходит?