我有兴趣设置一个postgres表,让临时行在给定时间段后过期,如果该用户没有“验证”。在mongo中,使用expires属性相对容易,但是postgres似乎没有本机选项。
基本上我需要将用户存储在一个表中,将记录(行)设置为在给定的时间限制内到期(让我们保持参数,12h)并且一旦该用户进行了身份验证,请禁用到期选项。 / p>
有一个我有TTL设置的表更有意义吗,一旦该用户进行身份验证,将用户从到期表移动到永久用户表?
答案 0 :(得分:1)
第一个选项是设置一个cron作业,让我们每隔一分钟执行一次检查是否需要删除任何已过期的行,如
delete from t where now()-registered >= interval '12 hours';
第二个是在(每个)插入/选择/更新上运行相同的查询(为了降低成本,你可以创建触发器WHEN username = current_user
或类似的那样....
第一个选项加 - 您不要在数据库中的事件中继。如果您创建部分索引(像create index on... where temp_row = true
这样的smth)并在用户进行身份验证后删除标记 - 带删除的检查应该足够快。
第二个 - 你不在OS工作中继。
两种解决方案都需要处理可能的雪崩 - 只允许执行一次......