案例:
在特定时间段内插入临时记录(例如,接下来5分钟内的now())。
如果“适当的操作” 在定义的时间段(例如now()+ 2分钟)内发生,则该记录将通过 delete语句删除。
如果期间结束,则应自动删除记录。
乍一看,我想在数据库空间内解决这个问题。
可能的解决方案:
我发现了两个可能有用的工具; pg_cron 和 pgAgent 。 我不确定是否可以实时动态设置它们,不是吗?
例如:(expired_time)et = now()+ 10分钟
SELECT cron.schedule('minutes(et) hours(et) * * *', $$DELETE FROM ... $$);
注意:上面的语法是指示性的!
数据库中是否还有其他方法或工具始终?
Tia
答案 0 :(得分:0)
一段时间后评估可用的解决方案,这是当前情况,对于想要使用生存时间( TTL )功能的人们来说 PostgreSQL 。
MongoDB :
删除过期文档的后台任务每60秒运行一次。
Redis :
从Redis 2.6开始,过期错误为0到1毫秒。
对于Redis,有两个fdw
:
redis_fdw,其中:
rw_redis_fdw,其中:
因此,由于我想在Pg10.x内具有高分辨率(小误差)TTL,所以我使用了:
postgres_fdw redis_fdw
PG10.5 ------------> PG9.6 ---------> Redis
PS:在这种情况下,数据结构或其他任何功能都不重要。只有TTL。
现在rw_redis_fdw支持PostgreSQL10.x和11。
因此:
redis_fdw
PG10.5/11 ---------> Redis