尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

OpenGauss内置函数初始化与查询全解析

OpenGauss内置函数初始化与查询全解析
📅 发布时间:2026/7/13 2:23:00

1. initdb 时写入 pg_proc 的代码
builtin_funcs.ini 不是运行时读取的文本文件,而是通过 #include 在编译时被预处理器内联到 C++ 源码中(src/common/backend/catalog/pg_builtin_proc.cpp),生成 FuncGroup g_func_groups[] 数组。 t

写入 pg_proc 的核心代码在 src/common/backend/utils/cache/catcache.cpp:

- InsertBuiltinFuncInBootstrap()(约第 2495 行):遍历 g_func_groups[],对每个 Builtin_func 调用 CreateHeapTuple4BuiltinFunc() 构建 HeapTuple,然后通过
simple_heap_insert() 直接插入到 bootstrap 模式的 pg_proc 关系描述符中。
- 这个函数在 src/gausskernel/bootstrap/bootparse.y 中,当创建 pg_proc 关系后被调用(约第 250 行)。
- CreateHeapTuple4BuiltinFunc()(约第 1834 行)负责将 Builtin_func 结构体的各个字段(参数类型、返回值、语言ID、权限等)组装成符合 pg_proc 系统表布局的
HeapTuple。

2. 查询时是否直接使用全局变量

查询时有两条路径:

快速路径(按 OID 查找)—— 直接用全局变量,跳过 pg_proc 表:
- fmgr.cpp 中的 fmgr_isbuiltin() 调用 SearchBuiltinFuncByOid(),从 oidHash 哈希表中直接查到 Builtin_func 指针
- 如果命中,fmgr_info_cxt_security() 直接将 fn_addr 指向 C 函数地址,不查询 pg_proc 物理表

慢速路径(按名称+参数查找)—— 缓存未命中时用全局变量动态构造:
- 当系统缓存 SearchSysCache1(PROCNAMEARGSNSP, ...) 未命中时,SearchCatCacheListMiss() 会调用 SearchBuiltinProcCacheList()
- 该函数通过 nameHash 哈希表找到匹配的 Builtin_func,再用 CreateHeapTuple4BuiltinFunc() 动态构建一个 HeapTuple 返回
- 注意这里构建的 HeapTuple 和 bootstrap 阶段 simple_heap_insert 写入磁盘的物理 pg_proc 数据是共存的

整体流程:

builtin_funcs.ini
└─ #include 编译时内联 ─► g_func_groups[] / nameHash / oidHash
│
├─ initBuiltinFuncs() 进程启动时初始化哈希表
│
├─ Bootstrap 阶段 ─► InsertBuiltinFuncInBootstrap() ─► simple_heap_insert(pg_proc)
│
└─ 查询阶段
├─ fmgr_isbuiltin(oid) ─► oidHash 直接查 ─► 返回 fn_addr(不走 pg_proc 表)
└─ 按名缓存未命中 ─► nameHash 查 ─► CreateHeapTuple4BuiltinFunc() 动态构造 Tuple

相关新闻

  • LLM投毒攻击原理与防御:数据层后门的精准建模
  • AI编程智能体在结构软件开发中的实践应用与优化策略
  • C++单元测试实战:gtest与gmock环境搭建、核心用法与工程实践

最新新闻

  • C++单例模式深度解析:从线程安全到工程实践
  • ChatGPT Plus订阅技术指南:API调用优化与成本控制策略
  • GB/T 7714-2015 参考文献格式:10个常见错误案例与Zotero 6.0 自动修正方案
  • 欧姆龙G6D-ASI与PIC32MZ的直流负载控制方案
  • Blackwell GPU售罄背后的四大硬约束解析
  • C++控制台图形编程:用数学公式绘制动态玫瑰线

日新闻

  • AI推荐结果怎么优化:适合深圳少儿素质培训机构的GEO服务商哪家好?全程零代码SAAS操作
  • RAG 实战教学完全指南
  • 企业级API网关架构深度解析:IBM Microgateway的技术实现与选型指南

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号