PG_CRON是PostgreSQL 9.5及以上版本中基于CRON的一个简单的作业调度程序,它作为扩展程序在数据库中运行。PG_CRON的使用方式与常规CRON保持相同的语法,但它允许直接从数据库安排PostgreSQL命令。
注意事项
出于安全性考虑,您只能够通过系统函数来操作定时任务(系统提供了增加和删除定时任务的功能),普通用户对于cron.job
(PG_CRON定时任务表)只有查看的权限。请您根据自己的需要选择函数的使用方法。
数据库中的定时任务都储存于默认postgres数据库中,但是您可以在其它多个数据库上执行定时任务查询。
PG_CRON默认开启,如果不能正常使用请提交工单开通。
开启或关闭插件
您可以在数据库中执行以下脚本开启或关闭PG_CRON。
-- 开启pg_cron
CREATE EXTENSION pg_cron;
-- 关闭 pg_cron
DROP EXTENSION pg_cron;
使用插件
每一个定时任务都分为定时计划和定时任务两个部分。定时计划规定了使用插件的计划,例如每隔一分钟执行一次该任务;定时任务是具体的任务内容,例如select * from some_table
。插件提供了一个可选参数database
,未指定该参数则默认配置postgres
数据库。
以下函数是您可以执行的全部函数,其它操作视为非法操作。
-- 执行一个任务
SELECT cron.schedule('schedule', 'task')
-- 选定数据库执行任务
-- 第三个参数不指定即为配置文件中数据库,默认postgres
SELECT cron.schedule('schedule', 'task', 'my_db')
-- 删除一个任务
SELECT cron.unschedule(schedule_id)
-- 查看当前任务列表
SELECT * FROM cron.job;
示例
- 增加任务项
-- 周六3:30am (GMT) 删除过期数据 SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$); schedule ---------- 42 -- 每天的 10:00am (GMT) 执行磁盘清理 SELECT cron.schedule('0 10 * * *', 'VACUUM'); schedule ---------- 43 -- 每分钟执行 指定脚本 SELECT cron.schedule('* * * * *', 'select 1;'); schedule ---------- 44 -- 每个小时的 23分 执行 指定脚本 SELECT cron.schedule('23 * * * *', 'select 1;'); schedule ---------- 45 -- 每个月的 4号 执行 指定脚本 SELECT cron.schedule('* * 4 * *', 'select 1;'); schedule ---------- 46
其中,PG_CRON计划使用标准的CRON语法,
*
表示每个该时间运行,指定数字则表示仅在这个时间运行,如下所示。┌───────────── 分钟 (0 - 59) │ ┌────────────── 小时 (0 - 23) │ │ ┌─────────────── 日期 (1 - 31) │ │ │ ┌──────────────── 月份 (1 - 12) │ │ │ │ ┌───────────────── 一周中的某一天 (0 - 6) (0 到 6 表示周末到下周六, │ │ │ │ │ 7 仍然是周末) * * * * *
- 删除任务项
-- 停止、删除一个任务 SELECT cron.unschedule(42); unschedule ------------ t
- 查看当前任务
SELECT * FROM cron.job; jobid | schedule | command | nodename | nodeport | database | username | active -------+------------+-----------+-----------+----------+----------+----------+-------- 43 | 0 10 * * * | VACUUM; | localhost | 5433 | postgres | test | t
- 查看任务执行记录
SELECT * FROM cron.job_log; jlgid | jlgjobid | jlgstatus | jlgrowcount | jlgruntime -------+------------+-------------+--------------+------------------------------- 2 | 1 | 2 | 1 | 2020-10-12 20:01:00.004602+08
在文档使用中是否遇到以下问题
更多建议
匿名提交