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行吗?没有理由需要根据大小单独进行分区,因为它已被适当地编入索引.
标签:spring-jdbc,java,spring,postgresql,jdbc 来源: https://codeday.me/bug/20191008/1871136.html