问题描述
我有一个带帖子的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)