(19)国家知识产权局 (12)发明 专利申请 (10)申请公布号 (43)申请公布日 (21)申请 号 202210437817.X (22)申请日 2022.04.25 (71)申请人 北京海量数据技 术股份有限公司 地址 100083 北京市海淀区学院路3 0号科 大天工大厦B座6层01室 申请人 广州海量数据库技 术有限公司 (72)发明人 余鹏 何小栋  (74)专利代理 机构 北京尚钺知识产权代理事务 所(普通合伙) 11723 专利代理师 王海荣 (51)Int.Cl. G06F 16/22(2019.01) G06F 16/242(2019.01) G06F 16/2455(2019.01) G06F 16/28(2019.01) (54)发明名称 OpenGaus s数据库中实现事 件触发器的方法 (57)摘要 本发明涉及关系型数据库管 理技术领域, 涉 及一种Open Gauss数据库中实现事件触发器的方 法。 本方法包括在数据库中增加一个元数据表用 来缓存事件触发器的元信息, 在每个线程中内置 一个哈希表用来存储事件触发器的函数ID和事 件触发器函数地址的映射, 对事件触发器进行管 理包括对命令进行语法解析、 验证命令权限、 根 据命令类型调用相应的管理函数对元数据表和 线程内置的哈希表进行操作, 在执行查询计划阶 段, 根据不同的事件和操作对象来调用相应的事 件触发器, 当与某个事件触发器相关的事件在该 事件触发器所在的数据库中发生时, 触发并执行 该事件触发器。 本发明解决了OpenGauss数据库 中无法实现事 件触发器的问题。 权利要求书2页 说明书6页 附图1页 CN 114741395 A 2022.07.12 CN 114741395 A 1.一种OpenGauss数据库中实现事件触发器的方法, 其特征在于, 所述方法包括下述步 骤: S1: 在OpenGaus s数据库中增 加一个元 数据表; S2: 在每个线程中 内置一个哈希 表; S3: 对事件触发器进行 管理; S4: 对事件触发器进行触发。 2.根据权利要求1所述的方法, 其特 征在于, S1中所述元数据表用来缓存事件触发器的元信息, 通过该元数据表可实现事件触发器 元信息的快速查询; S2中所述哈希表用来存储事件触发器的函数ID和事件触发器函数地址的映射, 通过该 哈希表可在线程内根据函数ID快速获得对应的事 件触发器的函数地址 。 3.根据权利要求1所述的方法, 其特 征在于, S3中所述对 事件触发器进行 管理, 包括: (1)对命令进行语法解析或语义分析; (2)验证命令的权限, 若命令无权限则报错退 出; (3)对于有权限的命令, 根据该命令的类型调用相应的管理函数对元数据表和线程内 置的哈希 表进行操作。 4.根据权利要求3所述的方法, 其特征在于, (1)中所述命令包括指定事件触发器的函 数主体的命令、 指定事件触发器的操作类型 的命令、 以及指定事件触发器的事件触发时机 的命令。 5.根据权利要求4所述的方法, 其特征在于, 所述事件触发器的操作类型包括事件触发 器的创建、 删除、 修改、 插 入, 其中: 事件触发器的创建是指创建一个新的事 件触发器; 事件触发器的删除是指查找到相应的记录并删除该记录, 同时对线程内置哈希表中对 应的条目进行删除; 事件触发器的修改是指查找到相应的记录并对其进行修改, 同时对线程内置哈希表中 对应的条目进行修改; 事件触发器的插 入是指查找到相应的记录并将其 直接插入元数据表和哈希 表。 6.根据权利要求1所述的方法, 其特征在于, S4中所述对事件触发器进行触发是指在执 行查询计划阶段, 根据不同的事件和操作对 象来调用相应的事件触发器, 当与某个事件触 发器相关的事件在该事件触发器所在的数据库中发生时, 则该事件触发器就会被触发并执 行, 其中: 所述与事件触发器相关的事件包括ddl_command_start事件、 ddl_command_end事件、 sql_drop事 件、 以及table_rewrite事 件。 7.根据权利要求6所述的方法, 其特征在于, 所述ddl_command_start事件在CREATE、 ALTER、 DROP、 SECURITY  LABEL、 COMMENT、 GRANT或REVOKE命令执行之前发生, 与ddl_ command_start事件相关的事件触发器通过EventTriggerDDLCommandStart函数实现, EventTriggerDDLCommandStart函数在事件执行的开始处, 针对顶层交互命令或完整查询 来调用, 通过EventTrig gerDDLCommandStar t函数实现事 件触发器的过程如下: (1)调用EventTriggerCommonSetup函数查找元数据表中ddl_command_start事件对应权 利 要 求 书 1/2 页 2 CN 114741395 A 2的事件触发器需要执 行的函数列表, 查找到对应的函数列表则进入下一 步, 否则直接退 出; (2)通过调用相应的函数依次执行上述函数列表中的函数, 全部执行完毕后进入下一 步; (3)释放资源并退 出。 8.根据权利要求6所述的方法, 其特征在于, 所述ddl_command_end事件在同一组命令 执 行 之 后 发 生 ,与 d d l _ c o m m a n d _ e n d 事 件 相 关 的 事 件 触 发 器 通 过 EventTriggerDDLCo mmandEnd函数 实现, EventTriggerDDLCommandEnd函数在事件执行完毕 后, 针对顶层交互命令或完整查询来调用, 通过EventTriggerDDLCommandEnd函数实现事件 触发器的过程如下: (1)调用EventTriggerCommonSetup函数查找元数据表中ddl_command_end事件对应的 事件触发器需要执 行的函数列表, 查找到对应的函数列表则进入下一 步, 否则直接退 出; (2)通过调用相应的函数依次执行上述函数列表中的函数, 全部执行完毕后进入下一 步; (3)释放资源并退 出。 9.根据权利 要求6所述的方法, 其特征在于, 所述sql_drop事件在删除数据库对象后并 在与ddl_command_en d事件相关的事件触发器触发之前发生, 与sql_drop事件相关的事件 触发器通过Ev entTriggerSQLDrop函数实现, 在执行删除时, 当删除对象是事件触发器支持 的类型, 则将删除对象地址存储在事件触发器的执行对象列表中, EventTriggerSQLDrop函 数在事件 执行完毕后, 针对顶层交互命令或完整查询来调用, 通过EventTriggerSQLDrop函 数实现事 件触发器的过程如下: (1)判断执 行对象列表是否为空, 若执 行对象列表为空则直接返回, 否则进入下一 步; (2)调用EventTriggerCommonSetup函数查找元数据表中sql_drop事件对应的事件触 发器需要执 行的函数列表, 查找到对应的函数列表则进入下一 步, 否则直接退 出; (3)通过调用EventTriggerInvoke函数依次执行上述函数列表中的函数, 全部执行完 毕后进入下一 步; (4)释放资源并退 出。 10.根据权利要求6所述的方法, 其特征在于, 所述table_rewrite事件在表被命令 ALTER TABLE和ALTER  TYPE的动作之前发生, 与table_rewrite事件相关的事件触发器通过 EventTriggerTableRewrite函数实现, EventTriggerTableRewrite函数在 ATRewriteTables函数中调用, 通过EventTriggerTableRewrite函数实现事件触发器的过 程如下: (1)调用EventTriggerCommonSetup 函数查找元数据表中table_rewrite事件对应的事 件触发器需要执 行的函数列表, 查找到对应的函数列表则进入下一 步, 否则直接退 出; (2)在当前 上下文中记录事 件触发器的表o id和reaso n, 然后进入下一 步; (3)通过调用EventTriggerInvoke函数依次执行上述函数列表中的函数, 全部执行完 毕后进入下一 步; (4)释放资源并退 出。权 利 要 求 书 2/2 页 3 CN 114741395 A 3

.PDF文档 专利 OpenGauss数据库中实现事件触发器的方法

安全报告 > 其他 > 文档预览
中文文档 10 页 50 下载 1000 浏览 0 评论 309 收藏 3.0分
温馨提示:本文档共10页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
专利 OpenGauss数据库中实现事件触发器的方法 第 1 页 专利 OpenGauss数据库中实现事件触发器的方法 第 2 页 专利 OpenGauss数据库中实现事件触发器的方法 第 3 页
下载文档到电脑,方便使用
本文档由 人生无常2024-03-18 00:08:48上传分享
给文档打分
您好可以输入 255 个字符
网站域名是多少( 答案:github5.com )
评论列表
  • 暂时还没有评论,期待您的金玉良言
站内资源均来自网友分享或网络收集整理,若无意中侵犯到您的权利,敬请联系我们微信(点击查看客服),我们将及时删除相关资源。