create table posts (
id int generated always as identity,
user_id int not null references users(id),
created_at timestamptz not null,
post_text text not null
);
您可以通过此查询获取活动帖子的数量,如果结果超过三篇,则禁用用户创建新帖子的功能。
select count(*)
from posts
where user_id = ?
and created_at > now() - interval '48 hours';
with rnums as (
select user_id, created_at, post_text,
row_number() over (partition by user_id
order by created_at desc) as rn
from posts
where created_at > now() - interval '48 hours'
)
select user_id, created_at, post_text
from rnums
where rn <= 3
order by user_id, created_at desc;
1条答案
按热度按时间qyyhg6bp1#
我只存储post的时间戳,并使用中间层逻辑将活动post的数量限制为3个。
如果你有这样一张table:
您可以通过此查询获取活动帖子的数量,如果结果超过三篇,则禁用用户创建新帖子的功能。
通过应用程序中的多个活动会话,这可能会被确定的攻击者击败,但如果这是一个问题,那么我将使用相同的逻辑将每个用户的可见帖子限制为只有三篇。拉动要显示的文章列表时:
如果您想使用postgresql来强制这个约束,那么您需要将触发器引入到混合中。