gpt4 book ai didi

java - postgresql 查询的大型结果集

转载 作者:搜寻专家 更新时间:2023-11-01 01:39:24 24 4
gpt4 key购买 nike

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

查询将返回一个很大的结果集,大约有 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 企业版 64 位
  • JRE 1.6 64 位
  • Spring 2.5.6
  • Postgresql JDBC 驱动程序 8.3-603

最佳答案

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

注意 PostgreSQL 的分区方案。它确实对优化器做了非常可怕的事情,并可能在不应该出现的地方导致大量性能问题(取决于您的数据的具体情况)。无论如何,您的行是否只有 1.8M 行?鉴于它已适当索引,因此没有理由仅根据大小对其进行分区。

关于java - postgresql 查询的大型结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/827110/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com