一. 前言
本文主要是讲述OpenGuass中是如何将pg_partition系统表中的分区信息初始化成PartitionMap的。
二. RangePartitionMap
在OpenGuass中,RangePartitionMap事实上是一个以boundary元素(保存着是每一个分区列的分区值)排序的RangeElement的数组,数组的每个元素为主要信息是partitionOid、partitionno和boundaries,boundaries是个常量数组,每个元素的值为每个分区列的分区值。
RangePartitionMap的初始化是在BuildRangePartitionMap中实现的,主要流程如下所示:
// 入参partition_list为pg_partition表中的每行数据
BuildRangePartitionMap(List* partition_list)
foreach (tuple_cell, partition_list) {
Datum datum = heap_getattr(...Anum_pg_partition_partitionno..) // 获取partitionno
BuildRangeElement(&(range_eles[range_itr]), range_map, partitionno) // 将partitionno和oid等信息组成成数组元素
untransformPartitionBoundary(elem->boundary) // 将pg_partition的每一行元素切分成数组,数组就是所有分区列的分区边界值
foreach (cell, boundary) { // 遍历每一个分区列的边界值
elem->boundary[c

本文详细解释了OpenGuass中如何从pg_partition系统表生成PartitionMap,涉及RangePartitionMap(基于范围的)、HashPartitionMap(基于哈希的)和ListPartitionMap(基于列表的)的构建过程,以及它们的初始化方法和数据结构.
最低0.47元/天 解锁文章
1001

被折叠的 条评论
为什么被折叠?



