Я пытаюсь выполнить запрос postgresql, который возвращает большой результат:
connection.setAutoCommit(false);
st = connection.createStatement(
ResultSet.CONCUR_READ_ONLY,
ResultSet.TYPE_FORWARD_ONLY
);
st.setFetchSize(100);
logMemory();
System.out.println("start query ");
rs = st.executeQuery(queryString);
System.out.println("done query ");
logMemory();
но это использует много памяти:
Free memory; 4094347680 (= 3905 mb).
start query
done query
Free memory; 2051038576 (= 1956 mb).
(печатается с помощью Runtime.getRuntime (). FreeMemory ())
Пока это работает, но база данных будет намного больше. Мне не нужен весь результат в памяти; Мне просто нужно обработать каждую строку, записать результаты на диск и перейти к следующей строке.
Я знаю, что setFetchSize - это только подсказка, но я нахожу странным, если postgresql / jdbc проигнорирует его, так как он существует целую вечность.
Есть ли способ обойти это? Моя единственная идея на данный момент - создать пакетный скрипт, который транслирует результат запроса на диск и затем анализирует файл с Java ...