나는이 코드가 작동하는 데 매우 가깝지만 뭔가 간단하게 빠져 있어야합니다.Sequel :: Model paginate/each_page는 데이터의 첫 번째 페이지 만 반환합니다.
필자는 sequel :: model을 사용하여 추상화 한 일련의 teradata 및 oracle 테이블을 보유하고 있습니다. 필자는 데이터베이스에 페이지 매김 확장을로드했습니다. 반환 된 데이터 집합을 가져올 수는 있지만 내가하는 일과 상관없이 첫 번째 페이지가 아닌 다른 것을 제공 할 수는 없습니다.
다음은 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
는 필자가 데이터 세트에 87,675 레코드가 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
주위에 몇 가지 테스트 코드를 구현하는 방법이다. 이 루프에서 마지막 두 번 반복 출력은 :
1,000
1,000
값 = {KEY1 => 12,345 : 키 2 => 14.58 : KEY3 => 155.44}
675
1,000
값 = {KEY1 => 12,345 : 키 2 => 14.58 : KEY3 => 155.44}
그래서 적절한 페이지 수가 생성됩니다. 페이징 된 레코드의 기본 개수가 정확합니다. 그러나 페이지에서 실제 값을 가져 오려고하면 레코드 수를 포함하여 첫 페이지의 레코드 만 가져옵니다.
무엇이 누락 되었습니까?
감사 제레미 ... 내 시도의 궁극적 인 목적에서 (당신은 아마
tera_db.loggers << Logger.new($stdout)
를 사용하여 생성 할 수 있습니다)는 SQL 로그를page.from_self.first
, 또는page.limit(1).all[0]
을 시도하고 결과가 다른 경우 볼뿐만 아니라, 게시 할 수 있습니다 페이지 매김 (pagination)을 사용하면 큰 데이터 세트를 한번에 메모리에로드하지 않고도 롤업 할 수있었습니다. 정규 데이터 세트에서 .each를 사용하여이 작업을 수행 할 수 있기 때문에 페이징을 사용할 필요가 없습니다. 나는 이것이 테라 데이타 어댑터의 문제 일 가능성이 있음에 동의한다. –