LightDB之定时任务(pg_cron)

用过PG的,应该都知道pg_cron定时任务,pg_cron定时任务,目前只支持分钟级,LightDB在原先基础上做了提升,不仅支持了秒级定时任务,还支持时区、一次性定时任务以及多种模式的任务

升级后的函数模型:

SELECT cron.schedule('<任务名称>', '<定时计划>', '<定时任务>', '<模式>', '<时区>', '<命令类型>');

--任务名称:定时任务的名称(创建时名称重复,则为修改,与PG相同)
--定时计划:简单来说就是cron表达式,设置执行周期
--定时任务:要做的任务
--模式(LightDB新增):‘single’ – 一次性任务
      --‘asap’ – 定时任务(超期结束后立即执行)
	  --‘next’/’timing’ – 定时任务(超期结束后等待下一个周期执行)
	  --‘fixed’ – 定时任务(固定周期执行,超期并行执行
	  --不传入模式时,默认为next模式
--时区(LightDB新增):如'0'表示GMT时间,'8'表示东八区,如不写默认是东八区时间;
--命令类型:'sql'或者'linux',默认为'sql'

一、秒级定时任务

┌───────────── 秒: 0 ~ 59  
│ ┌───────────── 分钟: 0 ~ 59
│ │ ┌────────────── 小时: 0 ~ 23
│ │ │ ┌─────────────── 日期: 1 ~ 31
│ │ │ │ ┌──────────────── 月份: 1 ~ 12
│ │ │ │ │ ┌───────────────── 一周中的某一天 :0 ~ 6,0表示周日。
│ │ │ │ │ │                  
│ │ │ │ │ │
│ │ │ │ │ │
* * * * * *

用法(同pg_cron):

SELECT cron.schedule('<定时计划>', '<定时任务>');、

SELECT cron.schedule('* * * * * *', 'SELECT 1');、

SELECT cron.schedule('<任务名称>','<定时计划>', '<定时任务>');

SELECT cron.schedule('test1','* * * * * *', 'SELECT 1');

二、多种模式

1、一次性定时任务,只在设定的时间执行一次,之后不会再执行

-- Change to Vacuum only once immediately
SELECT cron.schedule('dayly-vacuum', '* * * * * *', 'VACUUM', 'single');
  schedule
----------
       46

-- Change to Vacuum only once at the next 10:00:30am (East eight time zone)
SELECT cron.schedule('dayly-vacuum', '30 0 10 * * *', 'VACUUM', 'single');
  schedule
----------
      46

2、asap模式,超期结束后立即执行

-- Change to Vacuum every 30 seconds
SELECT cron.schedule('dayly-vacuum', '*/30 * * * * *', 'VACUUM', 'asap');
 schedule
----------
       46

-- Change to Vacuum every day at 10:00:30am (East eight time zone)
SELECT cron.schedule('dayly-vacuum', '30 0 10 * * *', 'VACUUM', 'asap');
 schedule
----------
       46

3、next模式,超期结束后,等到下一个计时周期的时间点开始

-- Change to Vacuum every 30 seconds
SELECT cron.schedule('dayly-vacuum', '*/30 * * * * *', 'VACUUM', 'next');
 schedule
----------
       46

-- Change to Vacuum every day at 10:00:30am (East eight time zone)
SELECT cron.schedule('dayly-vacuum', '30 0 10 * * *', 'VACUUM', 'next');
 schedule
----------
       46

4、fixed模式,无论上一次任务是否执行完,到下一个周期,就立刻执行,默认设置最多同时执行4个任务

-- Change to Vacuum every 30 seconds
SELECT cron.schedule('dayly-vacuum', '*/30 * * * * *', 'VACUUM', 'fixed');
 schedule
----------
       46

-- Change to Vacuum every day at 10:00:30am (East eight time zone)
SELECT cron.schedule('dayly-vacuum', '30 0 10 * * *', 'VACUUM', 'fixed');
 schedule
----------
       46       

三、时区,默认是东八区时间

-- Change to Vacuum every day at 10:00am (East eight time zone)
SELECT cron.schedule('dayly-vacuum', '0 10 * * *', 'VACUUM', 'next', '8');
 schedule
----------
       46

四、linux命令定时任务
目前已发版本,linux命令不支持,将会在22.2版本发布,可提前参考

-- delete log file every day at 23:59 (East eight time zone)
SELECT cron.schedule('dayly-touch', '59 23 * * *', 'rm -rf $PGDATA/log/*', 'next', '8','linux');
 schedule
----------
        6

更详细资料可参考官网信息:https://www.hs.net/lightdb/docs/html/pgcron.html

posted @ 2022-05-28 11:15  起司24  阅读(434)  评论(0)    收藏  举报