基于时间的分页

问题描述

我有一个带帖子的PostgreSQL数据库,我正在尝试对其进行分页。

该表如下所示:

postid | title | author | created 在其中创建的类型为timestamp without timezone

我的查询看起来像

SELECT * from posts 
WHERE extract(EPOCH FROM created) < :limit
ORDER BY created DESC
LIMIT 3

:limit在Java中很长,我将其作为参数传递。

但是,即使我的限制小于三个帖子的时间戳,我也总是检索​​相同的三个最新帖子。所以我想extract(EPOCH FROM created)部分是错误的,但我不知道如何解决。

解决方法

只要:limit确实是您认为的那样,您的代码就可以正常工作,并且应该执行您想要的工作。

但是,我建议将转换移至正确的操作数,而不是将存储的值转换为纪元。这样效率更高,并且可以利用timestamp列上的索引:

SELECT * 
from posts 
WHERE created < date'1970-01-01' + :limit * interval '1 second'
ORDER BY created DESC
LIMIT 3

或者:

WHERE created < to_timestamp(:limit::bigint)

一个可能的问题是:limit是毫秒而不是秒。如果是这样:

WHERE created < to_timestamp((:limit/1000)::bigint)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...