openGauss
开源数据库
openGauss社区官网
开源社区
openGauss之定时任务简单管理
2022-08-26MogDB
openGauss 之定时任务简单管理
零、概述
本文主要介绍定时任务涉及到的接口函数,并对函数中重要参数做简单说明,最后通过简单的实践来演示 openGauss 中定时任务的简单管理,关于相关函数的详细介绍请点击如下链接:PKG_SERVICE
一、定时任务涉及到的函数:
1、删除指定的定时任务
PKG_SERVICE.JOB_CANCEL(
job IN INTEGER); //指定作业号
2、禁用或启用定时任务
PKG_SERVICE.JOB_FINISH(
id IN INTEGER,
broken IN BOOLEAN, //true:禁用,false:启用
next_time IN TIMESTAMP DEFAULT sysdate); //下一次运行时间
3、提交一个系统提供的定时任务
PKG_SERVICE.JOB_SUBMIT(
id IN BIGINT DEFAULT,
content IN TEXT,
next_date IN TIMESTAMP DEFAULT sysdate,
interval_time IN TEXT DEFAULT 'null', //默认只执行一次
job OUT INTEGER);
4、修改定时任务的属性
包括任务内容、下次执行时间、执行间隔。
PKG_SERVICE.JOB_UPDATE(
id IN BIGINT,
next_time IN TIMESTAMP,
interval_time IN TEXT,
content IN TEXT);
二、实践操作
//创建一张表
openGauss=# create table test3(id int);
CREATE TABLE
//创建一个序列,用于向表test3中插入数据
openGauss=# create sequence seq2 start with 1 increment 1 nomaxvalue;
CREATE SEQUENCE
//创建一个存储过程作为定时任务的内容
openGauss=# create or replace procedure job_test
as
begin
insert into test3 values(seq2.nextval);
end;
openGauss$# /
CREATE PROCEDURE
//获取函数或存储过程的定义,通过系统表pg_proc查看,或通过函数pg_get_functiondef(oid)查看
openGauss=# select oid from pg_proc where proname='job_test';
oid
-------
16919
(1 row)
openGauss=# select * from pg_get_tabledef(16919);
ERROR: cache lookup failed for table 16919.
openGauss=# select * from pg_get_functiondef(16919);
headerlines | definition
-------------+-----------------------------------------------
1 | CREATE OR REPLACE PROCEDURE public.job_test()+
| AS DECLARE +
| begin +
| insert into test3 values(seq2.nextval); +
| end; +
| / +
|
(1 row)
//创建一个定时任务
openGauss=# select pkg_service.job_submit(1,'select job_test()',sysdate,'sysdate+1/(24*60)');
job_submit
------------
1
(1 row)
//第一个参数指定定时任务的作业号,如果传入的第一个参数为null值系统会自动为其生成一个作业号。
//上面的定时任务表示一分钟执行一次。
//通过系统表pg_job可以查看当前有哪些定时任务
select * from pg_job;
//检验定时任务是否成功
//1.查看表test3中是否有数据插入
openGauss=# select * from test3;
id
----
1
2
3
4
(4 rows)
//2.查看日志文件
/var/log/omm/omm/pg_log/dn_6001/postgresql-2022-05-07_085229.log
随着定时任务的开启,该日志文件会变得越来越大,记得定期清理。
//让定时任务失效,第三个参数可以省略,表示作业下一次执行的时间
openGauss=# select pkg_service.job_finish(1,true);
job_finish
------------
(1 row)
//执行过后,该定时任务的job_status会变成d,next_run_date字段会变成:4000-01-01 00:00:00
openGauss=# select * from pg_job;
-[ RECORD 1 ]--------+---------------------------
job_id | 1
current_postgres_pid | -1
log_user | omm
priv_user | omm
dbname | postgres
node_name | dn_6001
job_status | d
start_date | 2022-05-07 12:41:50.469699
next_run_date | 4000-01-01 00:00:00
failure_count | 0
interval | sysdate+1/(24*60)
last_start_date | 2022-05-07 12:48:54.693115
last_end_date | 2022-05-07 12:48:54.69783
last_suc_date | 2022-05-07 12:48:54.693115
this_run_date | 2022-05-07 12:48:54.693115
nspname | public
job_name |
end_date |
enable |
failure_msg |
//修改定时任务为一天执行一次,(注意:修改之前记得启动该定时任务pkg_service.job_finish)
openGauss=# select pkg_service.job_update(1,sysdate,'sysdate+1',null);
-[ RECORD 1 ]
job_update |
//删除定时任务,(如下显示是预先在gsql客户端执行了\x元命令)
openGauss=# select pkg_service.job_cancel(1);
-[ RECORD 1 ]
job_cancel |
本次实践中,设置的定时任务只是做了一个简单的工作,并不是特别的复杂。通过本次实践可以初步了解定时任务的创建、修改和删除过程。