2016-08-31 17 views
0

私はこのコードを動作させることに非常に近いと知っていますが、Sequel :: Model paginate/each_pageはデータの最初のページのみを返します

私はsequel :: modelを使って抽象化した一連のteradataとoracleテーブルを持っています。 Iveはデータベースにページ番号拡張をロードしました。私はデータセットを返すことができますが、私が何をしても、最初のページ以外のものを私に与えることはできません。

Iveがテーブルをどのように抽象化したかの例を示します。ここで

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 

は、アイブ氏は、データセット内の87675件のレコードがあります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 

の周りにいくつかのテストコードを実装する方法です。このループからの最後の2回の反復の出力は次のとおり

値= {:キー1 => 12345:KEY2 => 14.58:KEY3 => 155.44}

値= {:キー1 => 12345:KEY2 => 14.58:KEY3 => 155.44}

これで正しいページ数が作成されています。ページングされたレコードの基本的な数は正しいです。しかし、私がページ内の実際の値を取得しようとすると、レコードカウントを含む最初のページからのみレコードが取得されます。

私には何が欠けていますか?

答えて

0

page.firstは、データセットからオフセットを削除していますか?あなたの結果を再現することはできません。 Teradataアダプタ(Sequel自体の外部アダプタではない)に問題がある可能性があります。あなたは、私の試みの究極の目標おかげジェレミー... page.from_self.first、またはpage.limit(1).all[0]を試してみて、結果が異なっているかどうかを見るだけでなく、(おそらくtera_db.loggers << Logger.new($stdout)を使用して生成することができます)SQLログを投稿

+0

することもできますページネーションを使用すると、大きなデータセットを一度にすべてメモリにロードせずにロールバックできるようになりました。通常のデータセットで.eachを使うだけで、私はそれを行うことができるので、私は実際にページングを使う必要はありません。私はこれがおそらくteradataアダプターの問題であることに同意します。 –

関連する問題