Postgres:动态偏移

时间:2016-08-07 09:50:25

标签: sql postgresql

我有一张新闻报道。我们将此表eval称为。一群用户不断向news插入新行。当前正在浏览新闻Feed的用户(来自news表的数据)。我如何使分页保持一致,请记住,当用户浏览(例如第一页)时,其他用户正在其中插入更多数据。所以,如果第一页有18个新闻,那么我需要使用news,但在这种情况下我将检索错误的数据,因为已经插入了新的新闻。

如何正确实施分页?

1 个答案:

答案 0 :(得分:1)

在应用程序客户端中填写页面的最新和最旧的行时间戳。如果它是一个网络应用,则nextprevious链接将类似于:

<a href="/news?newest=2016-08-06+20%3A17%3A05.882252%2B00">Previous</a>
<a href="/news?oldest=2016-08-05+20%3A17%3A05.882252%2B00">Next</a>

然后将您从客户端收到的值的值传递给查询,将另一个值传递给null

(
    select *
    from (
        select *
        from news
        where ts > :newest
        order by ts
        limit 20
    ) s
    order by ts desc
)
union all
(
    select *
    from news
    where ts < :oldest
    order by ts desc
    limit 20
)

两次插入不太可能在同一毫秒内发生。