这篇文章主要介绍“PostgreSQL中什么函数通过递归调用初始化计划树中的所有Plan节点”,在日常操作中,相信很多人在PostgreSQL中什么函数通过递归调用初始化计划树中的所有Plan节点问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PostgreSQL中什么函数通过递归调用初始化计划树中的所有Plan节点”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!Plan
所有计划节点通过将Plan结构免费主机域名作为第一个字段从Plan结构“派生”。这确保了在将节点转换为计划节点时,一切都能正常工作。(在执行器中以通用方式传递时,节点指针经常被转换为Plan *)ExecInitNode函数递归初始化计划树中的所有Plan节点,返回对应给定的Plan Node节点的PlanState节点.测试脚本如下启动gdb,设置断点,进入ExecInitNode输入参数,node为T_Sort检查堆栈进入相应的处理逻辑返回结果设置断点,进入ExecSetExecProcNodeExecSetExecProcNode->输入参数,function为ExecSeqScan,在实际执行时调用此函数回到最上层的ExecInitNode,initPlan为NULL完成调用下面重点考察ExecInitSeqScan和ExecInitHashJoin,首先是ExecInitHashJoin
ExecInitHashJoin->ExecInitHashJoin->校验并初始化ExecInitHashJoin->初步的数据结构体ExecInitHashJoin->获取HashJoin的outer&inner(PG视为Hash节点)
outerNode为HashJoin,innerNode为HashExecInitHashJoin->进入outerNode的HashJoin,直接跳过ExecInitHashJoin->进入innerNode的调用(ExecInitSeqScan)ExecInitSeqScan
ExecInitSeqScan->执行校验,并创建Node.
注意:ExecProcNode=ExecSeqScanExecInitSeqScan->打开RelationExecInitSeqScan->使用合适的rowtype打开slot(初始化ScanTupleSlot)ExecInitSeqScan->初始化结果类型和投影ExecInitSeqScan->初始化子条件表达式(为NULL),返回结果ExecInitSeqScan->回到ExecInitNode for Node SeqScanExecInitSeqScan->回到ExecInitNode,结束调用ExecInitSeqScan->回到ExecInitHashJoinExecInitHashJoin
ExecInitHashJoin->完成outer relation的处理,开始处理inner relation(递归调用ExecInitNode)ExecInitHashJoin->查看outerDesc和innerDescExecInitHas免费主机域名hJoin->初始化节点slot/类型/投影/元组表等ExecInitHashJoin->配置外连接的NULL元组(不需要)ExecInitHashJoin->获取Hash操作的State,注意ExecProcNode是一个包装器(ExecProcNodeFirst),实际的函数是ExecHashExecInitHashJoin->初始化(子)表达式,均为NULLExecInitHashJoin->将哈希子句解构为外部和内部参数值,以便能够分别计算这些子表达式;还可以列出哈希运算符oid,以便查找要使用的哈希函数.ExecInitHashJoin->完成调用ExecInitHashJoin->最终结果(注意:这是最上层的HashJoin)到此,关于“PostgreSQL中什么函数通过递归调用初始化计划树中的所有Plan节点”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注云技术网站,小编会继续努力为大家带来更多实用的文章!
这篇文章主要讲解了“怎么解决EXPDP时报错ORA-31693”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决EXPDP时报错ORA-31693”吧!在服务器上导存放照片的表时,报如下错误信息:ORA-3…