适用范围
openGauss定时任务接口介绍
Pkg Service简介
在openGauss中,pkg service(Package Service)是一个用于管理和部署数据库扩展包的服务。数据库扩展包是一组扩展功能的集合,可以通过安装和卸载扩展包来增加或删除数据库的功能。
pkg service提供的定时任务接口再通过compat-tools工具封装为DBMS_JOB模块后,保持与Oracle的DBMS_JOB模块一致的定时任务功能。
定时任务创建后会分配对应的id,可通过视图pg_job查看任务执行状态。
下面将介绍该模块的相关接口函数:
定时任务函相关函数
#开启定时任务
select 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);
#暂停或者恢复定时任务
select PKG_SERVICE.JOB_FINISH(
id IN INTEGER,
broken IN BOOLEAN, //true:禁用,false:启用
next_time IN TIMESTAMP DEFAULT sysdate); //下一次运行时间
#修改定时任务
select PKG_SERVICE.JOB_UPDATE(
id IN BIGINT,
next_time IN TIMESTAMP,
interval_time IN TEXT,
content IN TEXT);
#删除定时任务
select PKG_SERVICE.JOB_CANCEL(
job IN INTEGER); //指定作业号
测试流程
创建一个基本表
openGauss=# create table job_table(id int primary key);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "job_table_pkey" for table "job_table"
CREATE TABLE
创建一个序列
openGauss=# create sequence job_seq start with 1 increment 1 nomaxvalue;
CREATE SEQUENCE
创建一个存储过程
#利用存储过程结合序列自增给job_table插入数据
openGauss=# create or replace procedure job_proc() as
openGauss$# begin
openGauss$# insert into job_table values (job_seq.nextval);
openGauss$# end;
openGauss$# /
CREATE PROCEDURE
查看存储过程oid
openGauss=# select oid from pg_proc where proname='job_proc';
-[ RECORD 1 ]
oid | 41190
openGauss=# select * from pg_get_functiondef(41190);
-[ RECORD 1 ]------------------------------------------------
headerlines | 1
definition | CREATE OR REPLACE PROCEDURE public.job_proc()
| AS DECLARE
| begin
| insert into job_table values (job_seq.nextval);
| end;
| /
|
开启一个定时任务
openGauss=# select PKG_SERVICE.JOB_SUBMIT(1,'call job_proc()',sysdate,'sysdate+1/(24*60*60)');
-[ RECORD 1 ]-
job_submit | 1
#每1s检查一次
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 22
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 24
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 25
暂停该定时任务
openGauss=# select pkg_service.job_finish(1,true);
-[ RECORD 1 ]
job_finish |
#每1s检查一次
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 136
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 136
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 136
修改该定时任务执行周期
#10s执行一次
openGauss=# select pkg_service.job_update(1,sysdate,'sysdate+1/(24*60*6)','call job_proc()');
-[ RECORD 1 ]
job_update |
重新启用该定时任务
openGauss=# select pkg_service.job_finish(1,false);
-[ RECORD 1 ]
job_finish |
#每5秒检查一次
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 146
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 146
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 147
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 147
删除该定时任务
openGauss=# select pkg_service.job_cancel(1);
-[ RECORD 1 ]
job_cancel |
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 165
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 165
openGauss=#
openGauss=# select count(*) from job_table ;
-[ RECORD 1 ]
count | 165
openGauss=# select * from pg_job;
(No rows)
参考文档
https://docs.opengauss.org/zh/docs/3.0.0/docs/Developerguide/PKG_SERVICE.html
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




