java – postgresql查询的大ResultSet

我正在对postgresql数据库中的表运行查询.数据库位于远程计算机上.该表使用postgresql partitioning capability有大约30个子表.

查询将返回一个大的结果集,大约180万行.

在我的代码中,我使用spring jdbc支持,方法JdbcTemplate.query,但我的RowCallbackHandler没有被调用.

我最好的猜测是postgresql jdbc驱动程序(我使用版本8.3-603.jdbc4)在调用我的代码之前将结果累积在内存中.我认为fetchSize configuration可以控制它,但我尝试了它,没有任何改变.我这样做是postgresql手册recomended.

当我使用Oracle XE时,此查询工作正常.但我正在尝试迁移到postgresql,因为分区功能在Oracle XE中不可用.

我的环境:

> Postgresql 8.3
> Windows Server 2008 Enterprise 64位
> JRE 1.6 64位
>春天2.5.6
> Postgresql JDBC Driver 8.3-603

解决方法:

要使用游标检索数据,除了设置提取大小外,还必须将ResultSet类型设置为ResultSet.TYPE_FORWARD_ONLY(认值)并自动提交为false.这是在您链接到的文档中引用的,但您没有明确提到您执行了这些步骤.

注意Postgresql的分区方案.它确实与优化器一起发生了非常可怕的事情,并且可能导致大量性能问题,而不应该存在(取决于您的数据的具体情况).无论如何,你的行只有1.8M行吗?没有理由需要根据大小单独进行分区,因为它已被适当地编入索引.

相关文章

连接数据库的方式:第一种方式:ODBC:开放数据库连接是微软...
JDBCRequest 使用VariableNamesmysql:数据库连接池对象var...
 1.JDBCDBC(JavaDataBaseConnectivity):Java数据库连接技术...
1.需要jar包的支持:java.sqljavax.sqlmysql-conneter-java....
1.简介Activiti是一个业务流程管理(BPM)框架,它是覆盖了业务...
1.JDBC体系系统一组规范:接口JDBC接口(API)包括两个层次:...