为什么要使用定时任务
在一个固定的时间点活间隔一段时间需要频繁触发某一动作,为了使用便捷,有了定时任务,极大的减少了工作的重复性,提高了效率。
定时任务的内容
基于定时任务产生的背景,定时任务内容包括:定时任务的创建、任务到达时间点自动执行、删除任务、任务内容的修改(任务 id、任务的关闭开启、任务的触发时间、触发时间间隔、任务内容等)。
定时任务
1.创建表
CREATE TABLE tb_test(insert_date timestamp default null,id int default null);
2.创建定时任务
定时内容为:每间隔一分钟执行一次向表 tb_test 中插入(当前系统时间,1)
SELECT pkg_service.job_submit(1,'insert into tb_test values(sysdate,1);',sysdate,'''1min''::interval');
job_submit
-------------
1
(1 row)
创建定时任务成功
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);
间隔三分钟,查看表中信息
auxdb=# select job_id,dbname,start_date,next_run_date,interval,failure_count from pg_job;
job_id | dbname | start_date | next_run_date | interval | failure_count
--------+--------+----------------------------+----------------------------+------------------+---------------
1 | auxdb | 2024-09-09 11:17:43.780788 | 2024-09-09 11:18:43.780788 | '1min'::interval | 0
(1 row)
auxdb=# select * from pg_catalog.pg_job_proc pjp where job_id=1;
job_id | what | job_name
--------+----------------------------------------+----------
1 | insert into tb_test values(sysdate,1); |
(1 row)
auxdb=# select * from tb_test;
insert_date | id
---------------------+----
2024-09-09 11:17:44 | 1
2024-09-09 11:18:44 | 1
2024-09-09 11:19:44 | 1
(3 rows)
定时任务执行成功
3.定时任务停止
SELECT pkg_service.job_finish(1,true);
显示信息
job_finish
-------------
(1 row)
4.定时任务启动
SELECT pkg_service.job_finish(1,false);
显示信息
job_finish
-------------
(1 row)
PKG_SERVICE.JOB_FINISH(
id IN INTEGER,
broken IN BOOLEAN, //true:禁用,false:启用
next_time IN TIMESTAMP DEFAULT sysdate); //下一次运行时间
5.删除定时任务
SELECT pkg_service.job_cancel(1);
显示信息
job_cancel
-------------
(1 row)
PKG_SERVICE.JOB_CANCEL(
job IN INTEGER); //指定作业号
修改定时任务的属性
PKG_SERVICE.JOB_UPDATE(
id IN BIGINT,
next_time IN TIMESTAMP,
interval_time IN TEXT,
content IN TEXT);
select pkg_service.job_update(1,null,'sysdate + 2/1440',null);
job_id | dbname | start_date | next_run_date | interval | failure_count
--------+--------+----------------------------+---------------------------+------------------+---------------
1 | auxdb | 2024-09-09 11:17:43.780788 | 2024-09-09 11:20:43.97129 | sysdate + 2/1440 | 0
(1 row)
job_id | what | job_name
--------+----------------------------------------+----------
1 | insert into tb_test values(sysdate,1); |
(1 row)
select * from tb_test;
auxdb=# select * from tb_test;
2024-09-09 11:17:44 | 1
2024-09-09 11:18:44 | 1
2024-09-09 11:19:44 | 1
2024-09-09 11:20:44 | 1
2024-09-09 11:22:44 | 1
2024-09-09 11:24:45 | 1
2024-09-09 11:26:46 | 1