如何按PostgreSQL中的非独特/非唯一值对排序进行分页?

Mic*_*Hsu 2 postgresql pagination

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

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

新行问题分页

Lau*_*lbe 6

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

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

对于查询和索引,你可以使用PostgreSQL的能力比较像这样:(num_likes, id) >= (4, 325698)

  • 他们不必是!如果您按 num_likes, id 排序,则行首先按 num_likes 排序,并且仅对于相等的 num_likes,行按 id 排序。它不会改变可见的顺序,但仍然使行唯一,因此您不会两次获得同一行。 (2认同)