PostgreSQL中的动态作业计划程序或计时器

时间:2018-09-25 11:28:35

标签: postgresql

案例:

在特定时间段内插入临时记录(例如,接下来5分钟内的now())

如果“适当的操作” 在定义的时间段(例如now()+ 2分钟)内发生,则该记录将通过 delete语句删除

如果期间结束,则应自动删除记录。

乍一看,我想在数据库空间内解决这个问题。

可能的解决方案:

我发现了两个可能有用的工具; pg_cron pgAgent 。 我不确定是否可以实时动态设置它们,不是吗?

例如:(expired_time)et = now()+ 10分钟

SELECT cron.schedule('minutes(et) hours(et) * * *', $$DELETE FROM ... $$);

注意:上面的语法是指示性的!

数据库中是否还有其他方法或工具始终

Tia

1 个答案:

答案 0 :(得分:0)

一段时间后评估可用的解决方案,这是当前情况,对于想要使用生存时间 TTL )功能的人们来说 PostgreSQL

  • MongoDB

      

    删除过期文档的后台任务每60秒运行一次。

  • Redis

      

    从Redis 2.6开始,过期错误为0到1毫秒。

对于Redis,有两个fdw

  • redis_fdw,其中:

    • 处于有效状态,但是
    • 不支持 TTL功能,并且
  • rw_redis_fdw,其中:

    • 未激活
    • 支持 TTL功能,并且
    • 不幸的是,对Pg10.x无效

因此,由于我想在Pg10.x内具有高分辨率(小误差)TTL,所以我使用了:

    具有 redis_fdw
  • Pg9.6和
  • Pg10.5和 postgres_fdw

postgres_fdw redis_fdw PG10.5 ------------> PG9.6 ---------> Redis

PS:在这种情况下,数据结构或其他任何功能都不重要。只有TTL。

更新

现在rw_redis_fdw支持PostgreSQL10.x和11。

因此:

           redis_fdw
PG10.5/11  --------->  Redis