pg_cron 是一个基于 cron 的 PostgreSQL 任务调度器扩展插件,pg_cron 的语法与 cron 相同,可以直接从数据库执行 PostgreSQL 命令。
定时计划使用标准的 cron 语法,其中 * 表示任意时间都运行,特定数字表示仅在这个时间时运行。
┌───────────── 分钟:0~59 │ ┌────────────── 小时:0~23 │ │ ┌─────────────── 日期:1~31 │ │ │ ┌──────────────── 月份:1~12 │ │ │ │ ┌───────────────── 一周中的某一天:0~6,0 表示周日。 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ * * * * *
修改参数 shared_preload_libraries
,新增 pg_cron
值。关于修改参数的详细信息,请参见修改参数。
用高权限账户进入 postgres 库中执行以下命令创建插件。
create extension pg_cron;
执行以下命令删除插件。
drop extension pg_cron CASCADE;
pg_cron 提供了 cron.schedule()
和 cron.schedule_in_database()
两个函数创建定时任务。
cron.schedule()
cron.schedule()
函数的使用语法如下:
cron.schedule ('<计划>', '<任务>'); cron.schedule ('<名称>', '<计划>', '<任务>');
使用示例如下:
cron.schedule_in_database()
函数
cron.schedule_in_database()
函数的使用语法如下:
cron.schedule_in_database ('<名称>', '<计划>', '<任务>', '<数据库>', '<用户>', '<是否生效>');
使用示例如下:
说明
cron.schedule_in_database()
函数不能指定用户。cron.schedule_in_database ('<名称>', '<计划>', '<任务>', '<数据库>', '<用户>', '<是否生效>')
中'<用户>'
只能填 NULL
。在设置了定时任务后,可通过 cron.job 表查看已经配置了的定时任务。
同时可通过 cron.job_run_details 表查看任务状态以及执行情况。
修改定时任务的语法如下:
cron.alter_job ('<任务id>', '<计划>', '<任务>', '<数据库>', '<用户>', '<是否生效>');
使用示例:
说明
cron.alter_job()
函数不能指定用户。cron.alter_job ('<任务id>', '<计划>', '<任务>', '<数据库>', '<用户>', '<是否生效>')
中'<用户>'
只能填 NULL
。
取消定时任务的语法如下:
cron.unschedule ('<任务id>'); cron.unschedule ('<名称>');
使用示例:
授权普通用户使用插件的语法如下:
grant USAGE on SCHEMA cron to other-user;
使用示例:
说明
普通用户无法执行 cron.schedule_in_database()
和 cron.alter_job()
函数。
在使用 pg_cron 插件时,需要使用以下两个参数:
shared_preload_libraries
:在创建 pg_cron 插件前,需要修改该参数添加 pg_cron
值。
cron.log_run
:用于开启或关闭将运行的所有任务记录到 cron.job_run_details 表中的功能, 该功能默认开启。该参数的可选值为 on
和 off
,默认值为 on
。
说明
shared_preload_libraries
和 cron.log_run
参数后,需要重启实例才能使修改生效。