openGauss源码解析(58)

openGauss源码解析:存储引擎源码解析(26)

3) CREATE索引

图4‑46 CREATE索引时序图

如图4-46所示,用户希望在现有的内存表中创建新索引时,openGauss通过FDW适配器将请求转发给MOT存储引擎。

正常事件流:FDW从MOT引擎中检索表对象并创建一个索引对象。然后,对每个列执行以下操作:①FDW验证列大小;②FDW验证列类型。对所有列定义重复此过程。验证所有列之后,生成的键大小也会被验证。在创建主索引时,原创建表阶段时添加的伪主索引将被新的主索引替换,应当在表仍然为空时完成。否则,将向表添加二级索引。索引数据本身是由主索引数据创建的。最后,整个DDL命令将持久化到重做日志。

P1:在此异常事件流中,不支持索引类型,FDW通过ereport工具向openGauss报告未支持的特性(feature unsupported)错误。目前只支持BTREE索引类型。

P2:在此异常事件流中,列大小验证失败,FDW通过ereport实用程序向openGauss报告无效列定义错误。

P3:在此异常事件流中,列类型验证失败,FDW通过ereport实用程序向openGauss报告未支持的特性(feature unsupported)错误。

P4:在此异常事件流中,索引的总键大小超过了最大允许的键大小,FDW通过ereport工具向openGauss报告无效列定义错误。

P5:在此异常事件流中,由于资源限制(内存不足),无法执行操作。

P6:在此异常事件流中,由于以下原因之一无法执行操作:①资源限制(内存不足),无法执行操作,②唯一主键冲突。

4) DELETE索引

图4-47 DELETE索引时序图

如图4-47所示,用户希望DELETE内存表中的现有索引时,openGauss通过FDW适配器将请求转发给MOT存储引擎。

正常事件流:FDW从MOT引擎中检索表对象,并转发从表中DELETE二级索引的请求。DDL命令在重做日志中持久化,然后截断索引数据并DELETE索引对象。

P1:在此异常事件流中,没有找到索引所属的表。此错误条件被静默忽略,FDW不会向openGauss报告错误。

P2:在此异常事件流中,在表对象中找不到请求的二级索引。此错误条件被静默忽略,FDW不会向openGauss报告错误。

posted @ 2024-04-29 16:52  openGauss-bot  阅读(17)  评论(0)    收藏  举报