PostgreSQL插件之pg_cron
【摘要】 pg_cron是一个使用cron语法的定时任务调度程序。作为数据库插件,它可以在数据库内部执行 PostgreSQL 的命令。1 cron语法标准cron语法,*表示每个时间段运行,特定数字表示仅在此时间。 ┌───────────── min (0 - 59) │ ┌────────────── hour (0 - 23) │ │ ┌─────────────── day of month...
pg_cron是一个使用cron语法的定时任务调度程序。作为数据库插件,它可以在数据库内部执行 PostgreSQL 的命令。
1 cron语法
标准cron语法,*表示每个时间段运行,特定数字表示仅在此时间。
┌───────────── min (0 - 59)
│ ┌────────────── hour (0 - 23)
│ │ ┌─────────────── day of month (1 - 31)
│ │ │ ┌──────────────── month (1 - 12)
│ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to
│ │ │ │ │ Saturday, or use names; 7 is also Sunday)
│ │ │ │ │
│ │ │ │ │
注意
- 定时任务使用GMT时间执行;
- 使用 crontab.guru 工具,可以方便地创建任务调度规则;
2 注意事项
- pg_cron需要后台守护进程,因此启动数据库前,需要将pg_cron放到shared_preload_libraries中;
- 定时任务不会在备机上运行,但当备机升主后,定时任务会自动启动;
- 定时任务会以任务创建者的权限执行;
- 一个实例可以并行运行多个任务,但同一时间某个任务仅能运行一个;
- 某个任务,需要等待前一个定时任务结束,那么该任务会进入等待队列,且会在前一个任务结束后尽快启动;
3 使用方法
创建或删除插件
-- 创建插件
CREATE EXTENSION IF NOT EXISTS pg_cron;
-- 删除
DROP EXTENSION IF EXISTS pg_cron;
创建任务
-- 任务1:每周六上午3:30(GMT),删除旧数据
SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
-- 任务2:每天上午 10:00(GMT),执行vacuum
-- 注意:任务以nightly-vacuum为命名,该接口 1.3 版本上才支持。
SELECT cron.schedule('nightly-vacuum', '0 10 * * *', 'VACUUM');
查看任务
SELECT * FROM cron.job;
删除任务
SELECT cron.unschedule(job_id)
4 配置参数
参数名 | 功能 | 默认值 | 需要重启 |
---|---|---|---|
cron.database_name | 定时任务元信息所在的数据库 | postgres | 是 |
cron.log_statement | 执行任务前,是否将sql打印到日志 | true | 是 |
cron.log_run | 是否将任务的执行信息存储到job_run_details表中 | true | 是 |
cron.host | 要执行定时任务的host名 | localhost | 是 |
cron.use_background_workers | 使用后台work进程,而非客户端连接执行任务 | false | 是 |
cron.max_running_jobs | 可以同时运行的job数量 | 5 | 是 |
注意
- 1.3 及以上的版本,支持参数cron.log_run和cron.use_background_workers;
- 1.3 及以上的版本,设置cron.use_background_workers为true后,cron.host不再生效,使用起来更加方便;
- 使用前,需要将cron.database_name修改为创建定时任务的数据库;
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)