首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >PostgreSQL内核开发者面临下岗, 全赖这个项目!

PostgreSQL内核开发者面临下岗, 全赖这个项目!

作者头像
用户4035096
发布2026-07-09 19:57:32
发布2026-07-09 19:57:32
140
举报

本篇播客

昨天发的没有声音,补一条音频:

PostgreSQL内核开发者面临下岗, 全赖这个项目!

PostgreSQL内核研发工程师即将大面积下岗! 这可能不是危言耸听.

有人用AI生成了一份PG代码符号表, 用AI高质量开发PG内核将很快被普及.

该项目见:

https://github.com/ryogrid/create_pg_super_document

https://ryogrid.github.io/create_pg_super_document/index.html

create_pg_super_document 为 PostgreSQL 代码库中的所有符号生成文档,然后利用这些符号文档,通过 AI 代理为功能、组件和其他元素创建高质量的文档。

表面上看就是用AI生成的符号表, 但这可是高质量AI Coding的基础, 已经威胁到每一位 PostgreSQL 内核研发工程师的地位.

同时我也建议所有国产数据库厂商, 特别是基于开源进行二次封装的厂商, 尽快调研一下, 把AI Coding搞起来.

create_pg_super_document 是什么

create_pg_super_document 是一个由AI智能体(AI Agent)辅助的工具,用于为项目或代码库创建一种“超级文档”(Super Document)。

核心功能和机制:

  1. 代码分析与索引: 它利用像 GNU GLOBAL (GTAGS) 这样的工具来分析项目的源代码,提取出重要的信息(如函数和变量的定义)。
  2. 数据处理: 它将这些索引数据导入到 DuckDB(一个嵌入式OLAP数据库)中进行存储和处理。
  3. 为AI服务: 最终目的是为AI智能体提供一个结构化、可查询的项目知识库。这样,AI智能体就可以利用这些高度精炼和组织好的代码信息,来生成更准确、更全面、更高质量的项目文档/代码。

简单来说,这个工具的作用是: 它就像一个智能化的项目资料整理员,先把项目代码的关键信息(在哪里定义了什么)整理好并存入一个小型数据库,然后将这个“整理好的资料库”交给AI,让AI基于这些准确信息去撰写项目说明书/代码。

create_pg_super_document 对 高质量 AI Coding 的意义

create_pg_super_documentAI 辅助编程(AI Coding) 具有非常重要的意义,它解决了目前大型语言模型(LLMs)在处理复杂代码库时面临的核心痛点

1. 显著提高 AI 上下文的质量与精确性

AI 辅助编程工具(如 GitHub Copilot、Cursor 等)在处理大型项目时,最大的挑战是 “上下文窗口” 的限制和 “信息过载” 。

  • 痛点: AI 无法将整个项目代码都塞入其上下文窗口。如果只看局部代码,很容易因为缺乏全局视角而 “胡言乱语”(Hallucination) ,提供错误的函数签名或不存在的变量名。
  • 解决方案:Super Document 通过将代码结构化(如哪个函数在哪里定义),将海量的代码文本转化为 精炼的、可查询的结构化数据(知识图谱的雏形)
  • 意义:
    • AI 获得了 项目架构的“事实表” ,而不是一堆需要自己理解的原始文本。
    • 当 AI 需要某个信息时,可以直接查询 DuckDB 数据库,获得 100% 准确的函数定义或文件路径,从而极大地减少了代码补全、文档生成或错误修复中的 臆造(Hallucination)现象

2. 实现更高效、更深度的跨文件操作

目前大多数 AI 编程工具在单个文件或相邻文件上表现良好,但在涉及整个代码库的重构、架构理解或复杂调试时,能力会迅速下降。

  • 意义:
    • 语义跳转和引用追踪: AI 可以利用结构化索引,快速追踪一个变量在整个项目中所有被使用的地方,或者找到一个接口的所有实现。这让 AI 能够执行跨越多个文件的复杂重构和一致性检查。
    • 架构理解: AI 不再是盲人摸象,而是通过结构化数据掌握了整个项目的依赖关系和调用链,使其能够提供更高维度的建议,例如“为了实现这个新功能,你需要在 A 文件中添加一个方法,并在 B 文件中更新对它的调用。”

3. 为未来的 AI 智能体(AI Agent)打下基础

create_pg_super_document 提供了一个关键的步骤:将代码库从一个非结构化的文本集合,转化为一个可供机器直接消费的结构化数据库。

  • 意义:
    • 工具调用能力 (Tool-Use): 未来的 AI 编程不再只是单纯的文本生成,而是像一个 “软件工程师智能体” 一样,能够主动使用工具。这个 Super Document 和 DuckDB 数据库,就是 AI Agent 进行项目分析时使用的核心工具
    • 自适应编程: AI Agent 可以利用这个知识库来动态地调整自己的编程策略。例如,当它发现一个函数定义不完整时,它可以自动向知识库发出额外的查询,以获取更多上下文,而不是直接放弃或出错。

简而言之,这个项目是 AI 辅助编程领域从“基于文本的模糊联想”迈向“基于事实的精确推理”的关键一步。它使得 AI 不仅能写代码,更能理解代码的结构和逻辑。

我先随便找一个函数给大家感觉一下

https://ryogrid.github.io/create_pg_super_document/A/AdvanceNextFullTransactionIdPastXid.html

AdvanceNextFullTransactionIdPastXid

位置

src/backend/access/transam/varsup.c:304-354

概述

AdvanceNextFullTransactionIdPastXid 将全局事务计数器推进到指定的 XID 之后,用于恢复和两阶段提交处理。

定义

void AdvanceNextFullTransactionIdPastXid(TransactionId xid)

详细描述

AdvanceNextFullTransactionIdPastXid 是一个专用函数,用于数据库恢复和两阶段提交启动期间,以确保全局事务计数器推进到特定事务 ID 之后。此函数对于在重放 WAL 记录或处理可能使用了先前数据库会话 XID 的已准备事务时,保持事务 ID 的一致性至关重要。它通过检测目标 XID 何时会导致转换到新纪元,从而智能地处理纪元回绕,即使在处理来自 WAL 记录的 32 位 XID 时,也能确保正确处理 64 位 FullTransactionId。

该函数包含安全优化:如果目标 XID 已经小于当前下一个 XID,则执行提前返回;并且由于它只在单进程上下文中运行,因此可以安全地读取当前状态而无需锁。

参数/成员变量

  • xid:全局计数器应该越过的 TransactionId。

依赖关系

调用的函数/引用的符号:

  • AmStartupProcess
  • XidFromFullTransactionId
  • TransactionIdFollowsOrEquals
  • TransactionIdAdvance
  • EpochFromFullTransactionId
  • FullTransactionIdFromEpochAndXid

调用自(代表性示例):

  • multixact_redo
  • ProcessTwoPhaseBuffer
  • xact_redo_commit
  • xact_redo_abort
  • ApplyWalRecord
  • ProcArrayApplyRecoveryInfo
  • RecordKnownAssignedTransactionIds

备注及其他信息

  • 位于 src/backend/access/transam/varsup.c:304-354
  • 仅可在恢复期间或从两阶段启动代码中调用
  • 包含断言,以验证它仅在启动进程或单进程模式下运行
  • 自动处理时间戳环绕检测
  • 针对无需反向推进的 XID 进行了优化,可实现快速返回。
  • 仅在实际修改共享计数器时才使用独占锁。
  • 对于在数据库重启后保持事务 ID 的一致性至关重要
  • 对正确的 WAL 重放和已准备好的交易处理至关重要

它的生成过程

https://github.com/ryogrid/create_pg_super_document/blob/master/README.md

这个“超级文档”(Super Document)的生成过程可以细化为以下几个关键步骤:

这个工具的核心在于先对代码进行结构化分析,再将分析结果喂给 AI 智能体,让 AI 基于准确的上下文生成文档。

“超级文档”的完整生成流程

第一步:代码索引与标签生成(通过 GNU GLOBAL)
  • 目标: 快速、精确地理解整个代码库的结构。
  • 工具: 主要使用像 GNU GLOBAL 这样的代码标记系统。
  • 过程:
    • 这个工具会扫描你的整个项目代码,分析其中的所有符号(如函数名、类名、变量名等)。
    • 它会生成一组标签文件(例如 GTAGS),记录了“哪个符号”在“哪个文件”的“哪一行”被“定义”或“引用”。
    • 例如:calculate_sum 函数被定义在 src/utils.py 文件的第 50 行。
第二步:创建结构化知识库(导入 DuckDB)
  • 目标: 将纯文本的索引文件转化为可高效查询的数据库。
  • 脚本: 使用项目中的 create_duckdb_index.py 等脚本。
  • 过程:
    • 工具将第一步生成的标签文件(GTAGS 数据)读取进来。
    • 它利用 DuckDB(一个高性能的嵌入式分析数据库)创建一个数据库文件。
    • 所有代码符号的定义、位置、文件路径等信息,都会被结构化地存储在这个数据库的表中。这使得后续的查询速度极快且精确。
第三步:AI 智能体查询与上下文构建
  • 目标: AI 智能体获取文档所需的所有准确代码信息。
  • 执行者: AI Agent 或相关的文档生成程序。
  • 过程:
    • 当需要为某个函数或模块编写文档时,AI 智能体不会直接阅读所有代码,而是 向第二步创建的 DuckDB 知识库发起查询(SQL 查询)
    • 例如: “请告诉我 UserAuthenticator 类的所有方法和它们的位置。”
    • 数据库迅速返回精确的答案。
第四步:生成“超级文档”
  • 目标: AI 根据查询到的精确上下文,生成高质量的文档内容。
  • 输出: 最终的“超级文档”。
  • 过程:
    • AI 智能体结合其自身的语言模型能力(例如生成清晰的解释、示例代码、原理说明)和第三步获取的准确代码结构信息,开始撰写文档。
    • 由于 AI 拿到的上下文是结构化、去噪且精确的(而不是直接阅读混乱的原始代码),它能有效避免代码细节的错误,生成一致且高质量的文档。

总结:

Super Document的生成,就是将 代码索引技术(如GNU GLOBAL)和 AI 语言模型的能力结合起来。其核心价值在于:用数据库管理代码信息,确保 AI 永远在准确的结构化数据上进行文档创作,从而实现文档/coding的自动化和高质量。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 digoal德哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本篇播客
  • PostgreSQL内核开发者面临下岗, 全赖这个项目!
  • create_pg_super_document 是什么
  • create_pg_super_document 对 高质量 AI Coding 的意义
    • 1. 显著提高 AI 上下文的质量与精确性
    • 2. 实现更高效、更深度的跨文件操作
    • 3. 为未来的 AI 智能体(AI Agent)打下基础
  • 我先随便找一个函数给大家感觉一下
    • AdvanceNextFullTransactionIdPastXid
    • 位置
    • 概述
    • 定义
    • 详细描述
    • 参数/成员变量
    • 依赖关系
    • 备注及其他信息
  • 它的生成过程
    • “超级文档”的完整生成流程
      • 第一步:代码索引与标签生成(通过 GNU GLOBAL)
      • 第二步:创建结构化知识库(导入 DuckDB)
      • 第三步:AI 智能体查询与上下文构建
      • 第四步:生成“超级文档”
    • 总结:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档