PostgreSQL插件之pg_cron

举报
大象数据库 发表于 2021/03/22 11:31:50 2021/03/22
【摘要】 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)
 │ │ │ │ │
 │ │ │ │ │

注意

  1. 定时任务使用GMT时间执行;
  2. 使用 crontab.guru 工具,可以方便地创建任务调度规则;

2 注意事项

  1. pg_cron需要后台守护进程,因此启动数据库前,需要将pg_cron放到shared_preload_libraries中;
  2. 定时任务不会在备机上运行,但当备机升主后,定时任务会自动启动;
  3. 定时任务会以任务创建者的权限执行;
  4. 一个实例可以并行运行多个任务,但同一时间某个任务仅能运行一个;
  5. 某个任务,需要等待前一个定时任务结束,那么该任务会进入等待队列,且会在前一个任务结束后尽快启动;

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. 1.3 及以上的版本,支持参数cron.log_run和cron.use_background_workers;
  2. 1.3 及以上的版本,设置cron.use_background_workers为true后,cron.host不再生效,使用起来更加方便;
  3. 使用前,需要将cron.database_name修改为创建定时任务的数据库;
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。