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

浙公网安备 33010602011771号