本文介绍如何通过RDS PostgreSQL提供的pg_cron插件设置定时任务。
前提条件
-
实例为RDS PostgreSQL 10或以上版本。
-
实例内核小版本为20230830或以上。
重要
20230830内核小版本之前已支持此插件,但为了规范插件管理,提升RDS PostgreSQL在插件侧的安全防护,RDS计划在内核版本迭代中陆续对部分存在安全风险的插件进行优化,部分插件在低内核小版本无法创建,更多信息,请参见【产品/功能变更】RDS PostgreSQL限制创建插件说明。
-
如果您在20230830内核小版前已经使用了此插件,则不影响使用。
-
如果您首次创建或重新创建此插件,请升级内核小版本到最新。
-
-
使用该插件前,需要将pg_cron加入到shared_preload_libraries参数中。
您可以使用RDS PostgreSQL参数设置功能,为shared_preload_libraries参数添加pg_cron。具体操作,请参见设置实例参数。
背景信息
pg_cron是基于cron的作业调度插件,语法与常规cron相同,但它可以直接从数据库执行PostgreSQL命令。
每一个定时任务分为两部分:
-
定时计划
规定使用插件的计划,例如每隔1分钟执行一次该任务。
定时计划使用标准的cron语法,其中*表示任意时间都运行,特定数字表示仅在这个时间时运行。
┌───────────── 分钟: 0 ~ 59 │ ┌────────────── 小时: 0 ~ 23 │ │ ┌─────────────── 日期: 1 ~ 31 │ │ │ ┌──────────────── 月份: 1 ~ 12 │ │ │ │ ┌───────────────── 一周中的某一天 :0 ~ 6,0表示周日。 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ * * * * *
例如每周六3:30am(GMT)的语法为:
30 3 * * 6
-
任务内容
用户具体的任务内容,例如
select * from some_table
。
注意事项
-
定时任务执行的时间是GMT时间,请注意换算时间。
-
定时任务都储存于默认数据库postgres中,但是您可以在其他数据库上查询定时任务。
-
RDS PostgreSQL 10、11、12在20201130内核小版本之前已支持pg_cron插件,但由于pg_cron插件已升级,推荐升级内核小版本,如果您在升级前已经在使用pg_cron,请重新创建插件来使用新的特性,但是重新创建后原有定时任务会丢失。
使用方法
重要
如下使用方法仅适用于内核小版本小于20230530的RDS PostgreSQL,如果您的内核版本大于等于20230530,则pg_cron插件的具体用法,请参见官方文档。
-
创建插件
CREATE EXTENSION pg_cron;
说明
-
仅高权限账号可以执行此命令。
-
该命令仅支持在数据库postgres中使用,如果在其他数据库执行,则会报错
ERROR: can only create extension in database postgres
。
-
-
删除插件
DROP EXTENSION pg_cron;
说明
仅高权限账号可以执行此命令。
-
执行某个任务
SELECT cron.schedule('', '')
示例
-- 周六3:30am (GMT) 删除过期数据。 SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$); ---------- -- 每天的10:00am (GMT) 执行磁盘清理。 SELECT cron.schedule('0 10 * * *', 'VACUUM'); ---------- -- 每分钟执行指定脚本。 SELECT cron.schedule('* * * * *', 'select 1;'); ---------- -- 每个小时的23分执行指定脚本。 SELECT cron.schedule('23 * * * *', 'select 1;'); ---------- -- 每个月的4号执行指定脚本。 SELECT cron.schedule('* * 4 * *', 'select 1;');
-
指定数据库执行任务
SELECT cron.schedule('', '', '')
说明
不指定数据库时会使用配置文件中的默认数据库postgres。
-
删除某个任务
SELECT cron.unschedule()
示例
SELECT cron.unschedule(43);
-
查看当前任务列表
SELECT * FROM cron.job;
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/154887.html