postgresql - jOOQ 的 fetchLazy() 真的很懒吗?

标签 postgresql jdbc jooq

我正在使用 jOOQ 3.4.2 通过 Scala 查询 PostgreSQL 数据库。我想一次获取一小部分结果集,而不是将整个结果集加载到内存中,因为查询可能会返回很多行。我有以下代码:

val query = context.selectFrom(table)
                   .where(conditions)
                   .orderBy(orderField)
                   .fetchSize(1)
val cursor = query.fetchLazy()
// Iterate through cursor using cursor.fetchOne()

当我调用 fetchLazy() 时,jOOQ 似乎会在内存中加载整个 结果集(或至少是结果集的一大块),然后再调用甚至从游标中获取第一行(根据我在调用 fetchLazy() 时看到的大量 recvfrom() 系统调用来判断)。我做错了什么吗?

最佳答案

Am I doing something wrong?

不是来自 jOOQ 方面。这正是您如何确保 jOOQ(通过 ResultQuery.fetchLazy()Cursor.fetchOne())和 JDBC 驱动程序(通过 ResultQuery.fetchSize(),转换为 PreparedStatement.setFetchSize())一次只能获取一行。

但是,您可能遇到了 this PostgreSQL JDBC driver caveat ,表示要使 fetchSize 起作用,您必须在显式事务中运行查询。

关于postgresql - jOOQ 的 fetchLazy() 真的很懒吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26241941/

相关文章:

在某些情况下用于抑制 'DELETE FROM table' 的 Postgresql 规则

jdbc - kafka 连接 JDBC 接收器。展平 JSON 记录时出错

jdbc - 如何使用 clojure 禁用 JDBC 中的自动提交

python - 在 Django 中用于 syncdb/migrations 和一般数据库访问的不同 Postgres 用户

sql - postgres中的聚合

python - 适用于 PostgreSQL 和 MySQL 的纯 python SQL 解决方案?

java - JDBC : Unable to connect second time

kotlin - JOOQ:通过记录更新时如何添加返回子句

java - Jooq - 纯 SQL 参数化数组/列表

java - 如何修复jOOQ代码生成工具错误?