openGauss源码解析(58)
openGauss源码解析:存储引擎源码解析(26)
3) 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内存表中的现有索引时,openGauss通过FDW适配器将请求转发给MOT存储引擎。
正常事件流:FDW从MOT引擎中检索表对象,并转发从表中DELETE二级索引的请求。DDL命令在重做日志中持久化,然后截断索引数据并DELETE索引对象。
P1:在此异常事件流中,没有找到索引所属的表。此错误条件被静默忽略,FDW不会向openGauss报告错误。
P2:在此异常事件流中,在表对象中找不到请求的二级索引。此错误条件被静默忽略,FDW不会向openGauss报告错误。

浙公网安备 33010602011771号