首页 > 解决方案 > 如何在 PostgreSQL 中按非不同/非唯一值对排序进行分页?

问题描述

如何通过对可能具有重复值的列进行排序来正确分页?我有一个名为 的表posts,其中有一列包含某个帖子的点赞数,名为num_likes,我想按 排序num_likes DESC。但是下图显示了我遇到的一个问题 - 在两页之间插入的新行会导致重复数据被提取。

这里的这个链接解释了这个问题,并给出了keyset pagination的解决方案,但据我所知,只有在对行进行排序的列是distinct / unique时才有效。如果不是这种情况,我该怎么做?

新行问题分页

标签: postgresqlpagination

解决方案


您可以通过向其添加主键轻松地使排序键唯一。

您不必向用户显示主键,只需在内部使用它来区分“相等”的行。

对于查询和索引,您可以利用 PostgreSQL 的比较能力,如下所示:(num_likes, id) >= (4, 325698).


推荐阅读