java 查postgre_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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值