VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

ALTER EVENT

功能描述

ALTER EVENT用于修改已创建的定时任务中的参数。

注意事项

  • 该功能仅在数据库兼容模式为MySQL时支持(即数据库实例初始化时指定DBCOMPATIBILITY='B')。

  • 可以通过SHOW EVENTS;或在PG_JOB表中查看log_user列来获得job的所有者信息。

  • 修改定时任务时每次修改成功后会更新被修改job的所有者为当前用户,若修改定时任务时指定了definer,则更新为被指定的definer。

  • 定时任务指定definer选项在以下场景下会指定失败:

    • 操作定时任务的用户不具有sysadmin权限。
    • 当前用户与被指定definer不一致时:

      • 指定definer为初始用户。
      • 指定definer为私有用户、运维管理员、监控管理员。
      • 开启三权分立:enable_separation_of_duty=on。

语法格式

ALTER
    [DEFINER = user]    
    EVENT event_name
    [ON SCHEDULE schedule]
    [ON COMPLETION [NOT] PRESERVE]
    [RENAME TO new_event_name]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'string']
    [DO event_body]

参数说明

  • DEFINER

    定时任务待执行语句在执行时使用的权限。默认情况下使用当前创建定时任务者的权限,当definer被指定时,使用被指定用户用户权限。

    definer参数只有具有sysadmin权限的用户有权指定。

  • event_name

    要修改的定时任务名称。

  • ON SCHEDULE schedule

    定时任务执行时刻。定时任务可以通过schedule设置为执行一次,也可以设置为执行多次:

    • AT timestamp [+ INTERVAL interval]:表示设置定时任务只在timestamp [+ INTERVAL interval] 时间点执行一次。
    • EVERY interval:表示设置定时任务在每隔interval时间后重复执行。

      • STARTS timestamp [+ INTERVAL interval] :用户可以给可重复执行的定时任务指定起始时间,即定时任务从timestamp [+ INTERVAL interval]时刻开始执行。当此参数为空时默认从当前时刻开始执行。
      • ENDS timestamp [+ INTERVAL interval]:用户可以给可重复执行的定时任务指定结束时间,即定时任务从timestamp [+ INTERVAL interval]时刻停止执行。当此参数为空时默认为3999-12-31 16:00:00。
  • RENAME TO

    更新定时任务名。

  • ON COMPLETION [NOT] PRESERVE

    默认情况下,一旦事务处于完成状态,系统表中就会立刻删除该定时任务。用户可以通过设置ON COMPLETION PRESERVE来覆盖默认行为。

  • ENABLE | DISABLE | DISABLE ON SLAVE

    创建定时任务后,定时任务默认处于ENABLE状态,即到规定时间立即执行待执行语句。用户可以使用DISABLE关键字,改变定时任务的活动状态。DISABLE ON SLAVE表现与DISABLE一致。

  • COMMENT

    用户可以给定时任务添加注释,注释内容在GS_JOB_ATTRIBUTE表中查看。

  • DO event_body

    定时任务待执行语句。

示例

1、创建测试表。

CREATE TABLE t_ev(num int);

2、创建一个执行一次的定时任务。

CREATE EVENT IF NOT EXISTS event_e1 ON SCHEDULE AT now() + interval 5 second + interval 33 minute DISABLE DO insert into t_ev values(0);

3、修改定时任务状态和待执行语句。

ALTER EVENT event_e1 ENABLE DO select 1;

4、修改定时任务名称。

ALTER EVENT event_e1 RENAME TO event_ee;