[toc]

MogDB 的sql_compatibility 为A 模式下,创建定时任务。

在 A 模式下,是通过 pkg_service 高级包的相关借口函数对任务进行管理。

注意:其中sql_compatibility 为 A 模式,表示同 O 数据库兼容,B 表示同 MySQL 数据库兼容,C 表示同TD 数据库兼容,PG表示同 POSTGRES 数据库兼容。在MogDB 中,该参数只能是确定的一个值,要么始终设置为A,要么始终设置为B,请勿随意改动,可能导致数据库行为不一致。

下面以 在 A 模式下,实现 p_cre_view 存储过程 每天23点定时运行。

  1. 权限

ERROR: permission denied for schema pkg_service
DETAIL: N/A
CONTEXT: referenced column: job_submit

授权:

1
2
mesdb=# grant usage on schema pkg_service to mes;
GRANT
  1. 检查 sql_compatibility

1
2
3
4
5
mesdb=> show sql_compatibility;
sql_compatibility
-------------------
A
(1 row)
  1. 创建定时任务

1
2
3
4
5
mesdb=>select pkg_service.job_submit(2,'call p_cre_view(sysdate)',sysdate,'trunc(sysdate+1)+(23/24)');
job_submit
------------
2
(1 row)

注意:

其中 2 表示 作业号,如果传入 null,会自动产生作业号,如果要指定,不能重复。如果重复会报错如下:

ERROR: duplicate key value violates unique constraint “pg_job_id_index”
DETAIL: Key (job_id)=(2) already exists.
CONTEXT: referenced column: job_submit

call p_cre_view(sysdate) 表示要执行的SQL语句;支持 一个或者多个DML语句,’匿名块’,‘调用存储过程的语句’或3种混合的场景

sysdate:下次作业运行时间,默认为当前系统时间(sysdate),如果是过去的时间,在提交作业时表示立即执行。

trunc(sysdate+1)+(23/24) :用来计算下一次作业运行时间的时间表达式,可以是 interval 表达式,也可以是 sysdate 加上一个numeric值,比如sysdate+1/24,如果为空或者字符串‘null’,表示只执行一次,执行后job状态 status 变成d,不再执行。

  1. 检查定时任务信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
mesdb=> select * from pg_job where job_id=2;
-[ RECORD 1 ]--------+---------------------------
job_id | 2
current_postgres_pid | -1
log_user | mes
priv_user | mes
dbname | mesdb
node_name | dn_6001
job_status | s
start_date | 2024-05-29 10:55:52.499872
next_run_date | 2024-05-30 23:00:00
failure_count | 0
interval | trunc(sysdate+1)+(23/24)
last_start_date | 2024-05-29 10:55:52.499872
last_end_date | 2024-05-29 10:55:52.57375
last_suc_date | 2024-05-29 10:55:52.499872
this_run_date | 2024-05-29 10:55:52.499872
nspname | mes
job_name |
end_date |
enable |
failure_msg |

  1. 修改定时任务

1
SELECT PKG_SERVICE.JOB_UPDATE(1,CONTENT => null, NEXT_TIME => null, INTERVAL_TIME => 'trunc(sysdate+1)+(23/24)');
  1. 查看 定时任务 详情

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
select  pj.job_id ,what,log_user ,dbname,job_status ,start_date ,next_run_date ,"interval" ,last_start_date ,last_end_date ,last_suc_date ,this_run_date 
from pg_catalog.pg_job pj
join pg_catalog.pg_job_proc pjp on pj.job_id = pjp.job_id ;
mesdb=> \x
Expanded display is on.
mesdb=> select pj.job_id ,what,log_user ,dbname,job_status ,start_date ,next_run_date ,"interval" ,last_start_date ,last_end_date ,last_suc_date ,this_run_date
mesdb-> from pg_catalog.pg_job pj
mesdb-> join pg_catalog.pg_job_proc pjp on pj.job_id = pjp.job_id ;
-[ RECORD 1 ]---+--------------------------------------------
job_id | 2
what | call p_cre_view(sysdate)
log_user | mes
dbname | mesdb
job_status | d
start_date | 2024-05-29 10:55:52.499872
next_run_date | 4000-01-01 00:00:00
interval | trunc(sysdate+1)+(23/24)
last_start_date | 2024-05-29 10:55:52.499872
last_end_date | 2024-05-29 10:55:52.57375
last_suc_date | 2024-05-29 10:55:52.499872
this_run_date | 2024-05-29 10:55:52.499872
  1. 禁用定时任务

1
SELECT PKG_SERVICE.JOB_FINISH(2,true);
  1. 启用定时任务

1
SELECT PKG_SERVICE.JOB_FINISH(2,false);
  1. 删除定时任务

1
select pkg_service.job_cancel(222)

原文作者: Hi.MogDB

原文链接: https://hi.mogdb.org/posts/1f4dffe2/

许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议