PostgreSQL で非常に大きなテーブル (300GB) からレポートを事前に生成しようとしています。私はこのようなことをします:
rs = stmt.executeQuery("SELECT * FROM tbl");
System.out.println("select all finished");
while (rs.next()) {
/* generate report and save it in report table */
/* generated reports are not in memory,
* They are saved in a summary table in each iteration */
}
アプリケーションを起動すると、Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
. 使用してみましたstmt.setFetchSize(1000)
が、問題は解決しません。
解決策は何ですか?Debian 6.0.5 および openJDK 6 で PostgreSQL 8.4.11 を使用しています。
[アップデート]
出力されたスタック トレースは、OutOfMemoryError
例外がrs = stmt.executeQuery("SELECT * FROM tbl");
インラインで生成されたことを示しています。またSystem.out.println("select all finished");
、表示されることはありません。
- モードで走ってい
autocommit
ます。 stmt.getResultSetConcurrency()
1007 を返します。stmt.getResultSetHoldability()
2を返します。rs.getType()
1003 を返します。