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)