【问题标题】:Sequel::Model paginate/each_page only returns first page of dataSequel::Model paginate/each_page 只返回第一页数据
【发布时间】:2016-09-01 01:02:26
【问题描述】:

我知道我非常接近让这段代码正常工作,但肯定缺少一些简单的东西。

我有一系列使用 sequel::model 抽象的 teradata 和 oracle 表。我已经将分页扩展加载到数据库中。我可以返回一个数据集,但无论我做什么,除了第一页之外,我无法让它给我任何东西。

这是我如何抽象表格的示例。

module MyDB
   class MyTable< Sequel::Model(tera_db["#{$env[:my_db]}__my_table".to_sym])
      @factory_name = :my_factory
      set_primary_key [:my_primary_key]
      @typecast_on_assignment = false
   end
end

这是我在 each_page 周围实现一些测试代码的方式

MyDB::MyTable.order(:my_primary_key).each_page(1000) do |page|
   p page.current_page_record_count
   p page.count
   p page.first
end

数据集中有 87,675 条记录。此循环的最后两次迭代输出是:

1000

1000

值={:key1=>12345, :key2=>14.58, :key3=> 155.44}

675

1000

值={:key1=>12345, :key2=>14.58, :key3=> 155.44}

所以...正在创建适当数量的页面。并且分页记录的基础计数是正确的。但是当我尝试获取页面中的实际值时,它只会从第一页获取记录,包括记录数。

我错过了什么?

【问题讨论】:

    标签: ruby sequel


    【解决方案1】:

    也许page.first 正在从数据集中删除偏移量?我无法重现您的结果。问题可能出在 teradata 适配器(它是外部适配器,不是 Sequel 本身的一部分)。您可能想尝试page.from_self.firstpage.limit(1).all[0] 看看结果是否不同,并发布SQL 日志(您可能可以使用tera_db.loggers &lt;&lt; Logger.new($stdout) 生成)

    【讨论】:

    • 谢谢 Jeremy... 我尝试使用分页的最终目标是能够滚动浏览大型数据集,而无需一次将其全部加载到内存中。因为我可以通过在常规数据集上使用 .each 来做到这一点,所以我真的不必使用分页。我同意这可能是 teradata 适配器的问题。
    猜你喜欢
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 2011-11-05
    相关资源
    最近更新 更多