非唯一键的Postgres分页?

sdg*_*sdh 2 postgresql pagination

假设我有一个包含(已建立索引)栏id : uuid和的事件表created : timestamp

id列是唯一的,但created不是。我想使用该created列按时间顺序排列表格。

像这样:

SELECT * FROM events WHERE created >= $<after> ORDER BY created ASC LIMIT 10
Run Code Online (Sandbox Code Playgroud)

$<after>是从上一个查询中获取的模板参数。

现在,我可以看到两个问题:

  1. 由于created不是唯一的,因此无法完全定义顺序。也许应该是那种id, created
  2. 每行只能在一页上,但是使用此查询时,最后一行始终包含在下一页上。

我应该如何在Postgres中解决这个问题?

Jas*_*sen 5

SELECT * FROM events 
  WHERE created >= $<after> and (id >= $<id> OR created > $<after>)
  ORDER BY created ASC ,id ASC LIMIT 10
Run Code Online (Sandbox Code Playgroud)

这样,每个时间戳记值的事件将按ID排序。您可以在任何地方拆分页面。