在尝试从Postgres中的服务器端实现分页时,我遇到了一个问题,即在使用limit和offset关键字时,您必须在唯一列(可能是主键)上提供ORDER BY子句。
在我的情况下,我将PU密钥使用UUID生成,因此我不能依赖于增加密钥的顺序。ORDER BY pkey DESC-可能不会总是导致新行排在最前面。所以我求助于使用Created Date列-timestamp列,该列应该是唯一的。
但是我的问题是,如果UI客户端要按其他列排序怎么办?如果它可能并不总是唯一的列,我求助于ORDER BY user_column created_dt DESC,以保持可预测的postgres分页结果。
这是正确的方法吗?我不确定我走的路是否正确。请指教。
我在一个旧的博客文章中谈到了这个确切的问题(在使用ORM的背景下):
关于结合使用排序和分页的最后一点。如果ORDER BY子句不包含表示数据中的经验序列的字段,则实现分页的查询的结果可能会很奇怪。在大多数(也许是所有)数据库引擎中,不能保证排序顺序超出在ORDER BY子句中明确指定的范围。例如:如果您有100个订单都在完全相同的日期发生,并且要求该数据按该日期排序的第一页,然后要求以相同的方式对数据的第二页进行排序,则完全有可能您将获得在两个页面上重复的一些数据。因此,根据查询和“可排序”数据的分布,
http://psandler.wordpress.com/2009/11/20/dynamic-search-objects-part-5sorting/
| 归档时间: |
|
| 查看次数: |
2189 次 |
| 最近记录: |