微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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行吗?没有理由需要根据大小单独进行分区,因为它已被适当地编入索引.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐