You need to enable JavaScript to run this app.
导航

任务调度器扩展(pg_cron)

最近更新时间2024.01.02 14:42:28

首次发布时间2023.12.08 22:51:48

pg_cron 是一个基于 cron 的 PostgreSQL 任务调度器扩展插件,pg_cron 的语法与 cron 相同,可以直接从数据库执行 PostgreSQL 命令。
定时计划使用标准的 cron 语法,其中 * 表示任意时间都运行,特定数字表示仅在这个时间时运行。

┌───────────── 分钟:0~59
│ ┌────────────── 小时:0~23
│ │ ┌─────────────── 日期:1~31
│ │ │ ┌──────────────── 月份:1~12
│ │ │ │ ┌───────────────── 一周中的某一天:0~6,0 表示周日。
│ │ │ │ │                  
│ │ │ │ │
│ │ │ │ │
* * * * *

插件的使用

创建插件

  1. 修改参数 shared_preload_libraries,新增 pg_cron 值。关于修改参数的详细信息,请参见修改参数

  2. 用高权限账户进入 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
    • 云数据库 PostgreSQL 版不提供 PostgreSQL 的“超级用户”给用户使用。因此请不要尝试使用 PostgreSQL 的“超级用户”使用此插件,否则将会报错。

查看定时任务

在设置了定时任务后,可通过 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 表中的功能, 该功能默认开启。该参数的可选值为 onoff,默认值为 on

说明

  • 关于如何修改参数,请参见修改参数
  • 修改 shared_preload_librariescron.log_run 参数后,需要重启实例才能使修改生效。