OpenGauss 之PartitionMap

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

​       本文主要是讲述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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值