1.Base基础/3.Icon图标/操作/search备份
1.Base基础/3.Icon图标/操作/search备份
EN
文档
关于AntDB
部署与升级
快速入门
使用教程
运维
调优
工具和插件
高级服务
数据安全
参考
  • 文档首页 /
  • 工具和插件 /
  • 集中式 /
  • pg_cron

pg_cron

更新时间:2024-07-01 14:39:41

pg_cron 插件描述

pg_cron 是一个简单的基于 cron 的AntDB任务调度器,作为扩展在数据库中运行。它使用与常规 cron 相同的语法,允许您直接从数据库定时调度并执行数据库命令。

使用准备

  • 修改配置文件后重启数据库
# 修改postgresql.conf文件,存在备机的情况下,备机也需要修改
shared_preload_libraries = 'pg_cron'
cron.use_background_workers = on
max_worker_processes = 16
  • 登陆数据库,执行 SQL 命令,创建扩展
CREATE EXTENSION pg_cron;

使用方法

pg_cron 提供三个主要操作:增加任务项、删除任务项、查看任务信息,对应的函数如下。

  • cron.schedule() 函数:增加任务项
# cron.schedule() 函数,用于计划 cron 任务,可以查看该函数定义如下:
crondb=# \df cron.schedule()
                                    List of functions
 Schema |   Name   | Result data type |            Argument data types             | Type
--------+----------+------------------+--------------------------------------------+------
 cron   | schedule | bigint           | job_name text, schedule text, command text | func
 cron   | schedule | bigint           | schedule text, command text                | func
 
 其中:
 job_name:cron 任务的名字,可为空不设置。
 schedule:表示 cron 任务时间表的文本。格式是标准 cron 格式。
 command:要运行的命令的文本。
 
 schedule 使用标准的 cron 语法,其中 * 表示“每个该时间运行”,特定数字表示“仅在这个数字时运行”。
# 格式是:分 时 日 月 星期
# week (0 - 6) = sun,mon,tue,wed,thu,fri,sat
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,...,sat
# |  |  |  |  |
# *  *  *  *  * 
  • cron.unschedule() 函数:删除任务项
# cron.unschedule() 函数删除 cron 任务。可以传入 job_name 或 job_id。请确保您是当前 job_id 所对应的策略的拥有者。该函数返回一个布尔值,指示成功或失败。可以查看该函数定义如下:
crondb=# \df cron.unschedule()
                          List of functions
 Schema |    Name    | Result data type | Argument data types | Type
--------+------------+------------------+---------------------+------
 cron   | unschedule | boolean          | job_id bigint       | func
 cron   | unschedule | boolean          | job_name text       | func

其中:
job_id:计划 cron 任务时从 cron.schedule 函数返回的任务标识符。
job_name:使用该 cron.schedule 函数计划的 cron 任务的名称。
  • pg_cron 表:查看任务信息,包括表格 cron.job 和 cron.job_run_details

    表格 cron.job:包含有关每个计划任务的元数据。

    表格 cron.job_run_details:包含过去运行的计划任务的历史信息。

使用示例

# 登陆数据库,执行如下SQL:
adb -p XXX -d postgres
CREATE DATABASE crondb;

# postgresql.conf 增加配置,主备机都要修改
cron.database_name = 'crondb'

# 重启数据库,上述参数修改生效,再登陆数据库
adb -p XXX -d crondb
crondb=# CREATE EXTENSION pg_cron;
CREATE EXTENSION
crondb=# CREATE TABLE tt(d timestamp);
CREATE TABLE
crondb=#
crondb=# INSERT INTO tt VALUSE(now());
INSERT 0 1
crondb=# --创建定时任务,每隔一分钟执行一次insert操作
crondb=# SELECT cron.schedule('*/1 * * * *', 'INSERT INTO tt VALUSE(now())'); 
 schedule
----------
        1
(1 row)

--查询操作可以在备机执行
--查看定时任务
crondb=# SELECT * FROM cron.job;
 jobid |  schedule   |           command            | nodename  | nodeport | database | username | active | jobname
-------+-------------+------------------------------+-----------+----------+----------+----------+--------+---------
     1 | */1 * * * * | INSERT INTO tt VALUSE(now()) | localhost |     7777 | crondb   | antdb      | t      |
(1 row)


--任务运行情况
crondb=# SELECT * FROM cron.job_run_details;
 jobid | runid | job_pid | database | username |           command            |  status   | return_message |          start_time           |
 end_time
-------+-------+---------+----------+----------+------------------------------+-----------+----------------+-------------------------------+----------
---------------------
     1 |     1 | 3385274 | crondb   | antdb      | insert into tt values(now()) | succeeded | INSERT 0 1     | 2023-08-21 16:46:00.002926+08 | 2023-08-2
1 16:46:00.006978+08
     1 |     2 | 3385311 | crondb   | antdb      | insert into tt values(now()) | succeeded | INSERT 0 1     | 2023-08-21 16:47:00.001908+08 | 2023-08-2
1 16:47:00.007554+08
(2 rows)

--查询定时任务是否实际生效
crondb=#  SELECT * FROM tt;
             d
----------------------------
 2023-08-21 16:45:57.834792
 2023-08-21 16:46:00.005022
 2023-08-21 16:47:00.005595
(3 rows)

--删定时任务,括号中的1代表jobid
crondb=# SELECT cron.unschedule(1);
 unschedule
------------
 t
(1 row)
问题反馈