这篇文章给大家分享的是有关PostgreSQL在查询分区表时如何确定查询的是哪个分区的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在规划阶段,函数set_rel_size中,如RTE为分区表(rte->inh=T),则调用set_append_rel_size函数,在set_append_rel_size中通过prune_append_rel_partitions函数获取“仍存活”的分区,下面介绍了prune_append_rel_partitions函数的主逻辑和依赖的函数gen_partprune_steps。PartitionScheme
分区方案,根据设计,分区方案只包含分区方法的一般属性(列表与范围、分区列的数量和每个分区列的类型信息),而不包含特定的分区边界信息。PartitionPruneXXX
执行Prune期间需要使用的数据结构,包括PartitionPruneStep/PartitionPruneStepOp/PartitionPruneCombineOp/PartitionPruneStepCombineprune_append_rel_partitions函数返回必须扫描以满足rel约束条件baserestrictinfo quals的最小子分区集的RT索引。测试脚本如下启动gdb,设置断点获取约束条件进入gen_partprune_stepsgen_partprune_steps->判断是否有默认分区(无)gen_partprune_steps_internal->进入gen_partprune_steps_internalgen_partprune_steps_internal->查看分区方案(PartitionScheme)gen_partprune_steps_internal->SQL查询结果
opfamily->integer_ops,整型操作gen_partprune_steps_internal->初始化变量gen_partprune_steps_internal->循环处理条件子句gen_partprune_steps_internal->布尔表达式,进入相应的处理逻辑gen_partprune_steps_internal->OR子句,进入相应的实现逻辑gen_partprune_steps_internal->OR子句的相关信息gen_partprune_steps_internal->递归调用gen_partprune_steps_internal,返回argsteps链表gen_partprune_steps_internal->构造step,继续OR子句的下一个条件gen_partpru免费主机域名ne_steps_internal->递归调用gen_partprune_steps_internal,进入递归调用gen_partprune_steps_internal函数递归调用gen_partprune_steps_internal->遍历条件递归调用gen_partprune_steps_internal->遍历分区方案递归调用gen_partprune_steps_internal->尝试将给定的“条件子句”与指定的分区键匹配,match_clause_to_partition_key函数输出结果为PARTCLAUSE_MATCH_CLAUSE(存在匹配项,输出参数为条件)递归调用gen_partprune_steps_internal->完成条件遍历,开始生产pruning步骤,使用第2种策略(根据拥有的OpExprs生成步骤)生成gen_partprune免费主机域名_steps_internal->递归调用返回,完成OR子句的处理gen_partprune_steps_internal->完成所有条件子句的遍历,返回resultgen_partprune_steps->回到gen_partprune_steps,返回steps链表gen_partprune_steps->回到prune_append_rel_partitionsprune_append_rel_partitions->设置上下文环境prune_append_rel_partitions->调用get_matching_partitions,获取匹配的分区编号(Indexes)
结果为5,即数组下标为0和2的Rel(part_rels数组)prune_append_rel_partitions->生成Relids
结果为40,即8+32,即3号和5号Relprune_append_rel_partitions->完成调用感谢各位的阅读!关于“PostgreSQL在查询分区表时如何确定查询的是哪个分区”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
相关推荐: 如何使用paramiko监控Oracle alert日志
小编给大家分享一下如何使用paramiko监控Oracle alert日志,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!环境设置Linux系统为 Centos 6.8Python环境…