已合并
fix: 修复 EXPLAIN VERBOSE 反解析被优化掉的 RECORD 子查询时报错 #9621
fix: 修复 EXPLAIN VERBOSE 反解析被优化掉的 RECORD 子查询时报错 #9621
已合并
zjj_sc创建于 8月24日
zjj_sc
zjj_sc成员
8月24日

【标题】

修复 EXPLAIN VERBOSE 反解析被优化掉的 RECORD 子查询时报错

【实现内容】:

  • 修复 EXPLAIN VERBOSE 生成执行计划文本时,反解析 RECORD 字段可能报错的问题。
  • 在 RTE_SUBQUERY 和 RTE_CTE 场景下,当对应的 inner_planstate 不存在时,使用 f1、f2 等默认字段名作为兜底。
  • 新增 ruleutils_record 回归测试,并加入单节点和多节点回归测试调度。
  • 本次修改仅影响执行计划文本生成,不改变 SQL 执行结果、优化器决策及公共接口。

【根因分析】:

当子查询或 CTE 被优化器证明结果恒为空时,原执行节点可能被优化成没有子节点的 Result。在执行 EXPLAIN VERBOSE 时,get_name_for_var_field() 需要通过 inner_planstate 恢复匿名 RECORD 的真实字段名。

由于对应子计划已经被优化掉,inner_planstate 为 NULL,原有代码会直接抛出 failed to find plan for subquery 或 failed to find plan for CTE,导致 SQL 本身能够正常规划,但无法生成执行计划文本。详见文章:https://mp.weixin.qq.com/s/Y5PsLdxDmvoDPHZI0jQqag

【实现方案】:

参考 PostgreSQL 上游 修复方案https://www.postgresql.org/message-id/18576-9feac34e132fea9e@postgresql.org ,在无法从计划树恢复真实 RECORD 字段名时,按照 RowExpr 默认字段命名规则回退为 fN:

  • 使用 palloc 分配字段名内存。
  • 使用 snprintf_s 生成 f1、f2 等字段名,并通过 securec_check_ss 检查结果。
  • 同时处理 RTE_SUBQUERY 和 RTE_CTE 分支。
  • 保持 openGauss 当前 PlanState、向量化及扩展执行节点的兼容性,不引入上游新版本的 Plan 类型断言。
  • 使用 information_schema.parameters 构造稳定复现,验证修复后执行计划输出 ((ss.x).f2),定向回归测试通过。

上游参考提交:https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=b919a97a6c 、https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=7408772de5 。

【关联需求或issue】:
#8424
【开发自验报告】:

  1. 请附上自验结果(内容或者截图)
  2. 是否可以添加fastcheck测试用例,如是,请补充fastcheck用例
  3. 是否涉及资料修改,如是,在docs仓库补充资料
  4. 是否考虑升级场景(系统表修改、日志持久化以及修改执行态数据格式)
  5. 是否考虑在线扩容等扩展场景
  6. 是否考虑异常场景/并发场景/前向兼容/性能场景
  7. 是否对其他模块产生影响
  8. 是否需要回合补丁版本(5.0、6.0),涉及(结果错误|coredump|性能劣化|内存泄露|集群异常)相关修复请排查回合补丁分支
  9. 针对Plugin仓dolphin插件,新增/修改的代码是否已使用 DOLPHIN 宏进行控制,方便后续回合openGauss-server仓代码

【当前PR是否有AI参与】:
[x] 否
[ ] 是
__1. AI Agent 平台:
__2. AI 模型:
__3. Prompt上下文 :

【其他说明】:

likedislike
Pull Request已成功合入, 合并人@opengauss_bot
(感谢 zjj_sc 的贡献)
opengauss-ci-bot成员
8月24日 评论:

openGauss pipeline is running. Please wait a moment...

likedislike
opengauss_botopengauss_bot成员
8月24日 添加了label:sig/StorageEnginesig/SQLEnginesig/SecurityTechnologysig/CMsig/CloudNativesig/AI
opengauss_bot
opengauss_bot成员
8月24日 评论:

Welcome To openGauss Community

Hey @m0_57849461 , thanks for your contribution to the community.

Bot Usage Manual

I'm the Bot here serving you. You can find the instructions on how to interact with me at Here . That means you can comment below every pull request or issue to trigger Bot Commands. You can self-configure the PR merge rules for this repository. For more details, please refer to Here.

Contact Guide

If you have any questions, please contact the SIG: StorageEngine, AI, CM, CloudNative, SecurityTechnology, SQLEngine ,
and any of the maintainers: @CarrotGo, @chendong76, @chenxiaobin19, @congzhou2603, @dodders, @hwworkholic, @jemappellehc, @muyulinzhong, @quemingjian, @shenzheng4, @shirley_zhengx, @superlchf, @totaj, @wlff234, @wofanzheng, @ywzq1161327784 ,
and any of the committers: @Igali, @bihua111, @cailei19, @h_ray, @levy53071, @libiao2024, @lihaixiao, @mrzack, @wangfeihuo, @wuyuechuan, @xiong_xjun, @zhangfengzhi123, @zhangxubo, @zhangzq131, @zjh_hw .

likedislike
Oopengauss-ci-bot成员
8月24日 添加了label:codecheck-running
Oopengauss-ci-bot成员
8月24日 添加了label:docs-ci-pipeline-running
此处折叠了130条消息 查看更多
opengauss-ci-bot成员
8月25日 评论:

静态检查

Check Name Build Details Check Result Check Detail
CodeCheck #80674 ✅ 通过 >>>
likedislike
Oopengauss-ci-bot成员
8月25日 添加了label:codecheck-success
Oopengauss-ci-bot成员
8月25日 删除了label:codecheck-running
zjj_sczjj_sc成员
8月25日 修改了pull request 的描述
zjj_sczjj_sc成员
8月25日 修改了pull request 的描述