新手问题 分页有重复数据,没找到原因

as181920 · 2013年03月13日 · 最后由 as181920 回复于 2013年03月14日 · 2989 次阅读
@current_category="xxx"
Article.tagged_with(@current_category).where("priority>?",0).order("priority desc").page(3).per(3)
Article.tagged_with(@current_category).where("priority>?",0).order("priority desc").page(4).per(3)

如上,简单的分页,结果发现第 3 页最后一个和第 4 页第一个是同一个 id,没想明白原因。 db:postgresql paginate: kaminari

要是priority都一样,应该按记录的创建时间排么

#1 楼 @keating 应该是主键顺序的

#2 楼 @huacnlee 那如果主键是 uuid,没有 integer 这样明显的顺序呢

#3 楼 @keating 这个我也不清楚,之前像 MongoDb 的 ObjectId 是更具字符来排序的,所以那个 ID 基本没法用来排序

#1 楼 @keating #2 楼 @huacnlee

priority 有可能重复,难道两次查询的结果数据排序有不一样(同 priority 数据的排序)?,理论上似乎有这种可能,只是没遇到过。(因为一般按 id 倒序排,曾经某个书某个角落看到这个是不一定的,所以建议加指定排序)

可以把主键也加到排序当中,这样每次排序(包括同 priority)肯定一致,就可以消除这个问题?

可惜为了处理问题把数据临时改了,重现不了。

@as181920 几乎不可能是同 priority 的原因,因为即使 priority 一样,数据库先后几次排序的原理应该都是一样的,而不是随机的;所以像这么诡异的问题,指不定原因是什么,也许程序哪里有 bug 呢

实在找不出问题就把 AR 生成的 SQL 语句拿来直接去 pg 里面跑一下,看出来的结果是怎么样的。

出错时的数据没有特别保存,当前生产数据正常,程序代码数据库都没动。现在用 sql 和 AR 结果都一样(都正常嘛),或许以后有重现时才能具体看到。

两次查询间其它事务插入了一条数据不就会这样吗?

#9 楼 @windwiny 放心,没这种情况(数据没人动),特别定位的时候更每人碰数据,在 console 运行还是这样的问题,只是没有如上面说的到 sql 下去看。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号