4 ms·
I'd assume it's common knowledge that you cannot paginate using OFFSET + LIMIT unless you use ORDER BY on an unique set of columns, no matter what database you'
by matharmin 2mo ago
I'd assume it's common knowledge that you cannot paginate using OFFSET + LIMIT unless you use ORDER BY on an unique set of columns, no matter what database you're using. The only exception is when the database provides an explicit order guarantee without the ORDER BY, such as the case with `preserve_insertion_order = true` here.
- sroussey 2mo agoEven then, that does not work if new records are being inserted.
- maest 2mo agoYou handle this by paginating inside a transaction
- sroussey 2mo agoThat does not work for web apps, mobile, etc
- ndr 2mo agoUnless I grossly misunderstood your point, you're bound to see stale data. Such is the nature of distributed systems.
- sroussey 2mo agoYes, there is always a failure mode. But if do a search or have some result set, it is convenient to have paging work as close to expected as possible. Say you are processing/shipping orders. You do the first page and then advance to page 2. The very next order may no longer be the next order that would have shown depending on how many orders came in. In fact if order are coming in fast it will be impossible to page through a search result. But if you incorporate the last I’d seen you will get something closer to what the user expects. Naive offset won’t give you this.