在rails上使用postgresql和ruby,我想批量处理一个大型数据库。我似乎无法使用find_each,因为它适用于最小的id向上。但是我需要处理最新的数据,它具有最大的id。
我目前的尝试是
score_ok.order(cmp_id: :desc).limit(X).offset(Y).pluck(:id)
其中score_ok是具有where子句的范围。 如果我在一个小的测试数据库上尝试这个,那么没有限制和偏移,即
score_ok.order(cmp_id: :desc).pluck(:id)
我看到了
[372,362,363,361,366,367,368,369,370,371,364]
现在,如果我这样做
score_ok.order(cmp_id: :desc).limit(2).offset(0).pluck(:id)
我得到了
[362, 361]
如果我这样做
score_ok.order(cmp_id: :desc).limit(2).offset(2).pluck(:id)
我得到了
[362, 366]
但我想要的是[372,362]然后[363,361]。我该怎么做呢?我已经尝试将limit(2).offset(2)
转移到查询的开头,但这没有帮助。
答案 0 :(得分:0)
mu is too short's评论解释了这一行为。 cmp_id具有重复值,显然数据库不需要每次以相同的方式对相等的值进行排序。解决这个问题的一种方法是添加辅助密钥以一致的方式打破关系。