操作场景
RDS-PostgreSQL支持 pg_cron
插件,它使用与常规 cron 相同的语法,允许您直接从数据库定时调度并执行数据库命令。
前提条件
- 请确保您的实例内核大版本满足,本插件所支持的内核版本,请参考支持的版本插件列表。
注意事项
- 定时任务执行的时间是GMT时间,请注意换算时间。
- 定时任务默认储存于数据库postgres中,但是您可以在其他数据库上查询定时任务。
- pg_cron插件安装在
cron.database_name
参数指定的数据库中。cron.database_name
参数值默认为postgres
,如果您需要将pg_cron插件安装在其他数据库中,请修改cron.database_name
参数值,详情请参见修改RDS-PostgreSQL实例参数。 - pg_cron创建后,需要修改
cron.use_background_workers
参数值为on
,详情请参见修改RDS-PostgreSQL实例参数。 - 将pg_cron插件应用至其他数据库后,
cron.database_name
参数值默认修改为应用的最后一个数据库。
插件使用
- 安装插件
CREATE EXTENSION IF NOT EXISTS pg_cron;
- 卸载插件
DROP EXTENSION IF EXISTS pg_cron;
使用示例
执行任务
SELECT cron.schedule('<定时计划>', '<定时任务>')
删除任务
SELECT cron.unschedule(<定时任务ID>)
查看当前任务列表
SELECT * FROM cron.job;
示例
-- 1.构造数据
create table t1 (id serial,curr_time varchar,curr_user varchar);
-- 2.创建定时任务,10s插入一条数据到表t1
SELECT cron.schedule('Ever 10s insert data','10 seconds', $$insert into t1(curr_time,curr_user) values(now()::varchar,user)$$);
-- 3.查看定时任务信息
select * from cron.job;
select * from cron.job_run_details order by start_time desc;
--4.查看插入结果
select * from t1;