该技能面向需要深入理解 PostgreSQL SQL 语法的开发场景,核心用途是查阅 PostgreSQL 源码中的解析器与语法定义(gram.y),以准确理解各类 SQL 语句的结构和解析规则。资料说明,当需要在 pgschema 中实现新的 SQL 语句解析、调试基于 pg_query_go 的解析问题、理解复杂 SQL 语法(如 CREATE TABLE、CREATE TRIGGER)、在 internal/diff/*.go 中生成 DDL、验证 SQL 语句结构、理解优先级与语法规则,或学习 PostgreSQL 特有语法扩展时,可调用该技能。
主要能力围绕 PostgreSQL 源码展开。资料列出了关键源码位置:主解析器目录为 src/backend/parser/,其中 gram.y 是 Yacc/Bison 语法文件,定义 PostgreSQL SQL 语法;scan.l 是词法扫描器;keywords.c 定义保留与非保留关键字;parse_clause.c、parse_expr.c、parse_type.c、parse_relation.c、parse_target.c、parse_func.c、parse_utilcmd.c 分别处理子句、表达式、类型名、表与关系、目标列表、函数调用和 DDL 工具命令;analyze.c 与 parse_node.c 负责解析后分析与节点创建。技能还提供了语句类型与 gram.y 节、parse_utilcmd.c 函数的对应表,例如 CREATE TABLE 对应 CreateStmt 与 transformCreateStmt(),ALTER TABLE 对应 AlterTableStmt 与 transformAlterTableStmt(),CREATE TRIGGER 对应 CreateTrigStmt 与 transformCreateTrigStmt(),CREATE INDEX 对应 IndexStmt 与 transformIndexStmt() 等。
使用方式上,资料给出分步工作流:先识别 SQL 语句类型,再在 gram.y 中定位产生式规则(可通过 grep 搜索),然后理解语法结构(终结符、非终结符、动作、备选分支、opt_ 可选规则),追溯相关规则,交叉参考 parse_utilcmd.c 的转换逻辑,最后应用到 pgschema 的解析与 DDL 生成中。资料还解释了可选元素、列表、备选分支、优先级等语法概念,并给出 CREATE/ALTER/DROP 语句的常见模式。
适用场景包括:为 pgschema 实现 SQL 解析、调试解析错误、理解表列约束、触发器 WHEN 子句、索引元素、外键选项、GENERATED 列、CREATE TABLE LIKE、约束触发器、表达式索引等结构。限制方面,资料未提供该技能的具体安装方式、收费信息或独立运行界面;其内容依赖 PostgreSQL 源码仓库,需要本地克隆或查阅源码,且版本差异(如 14–17)需自行核对 gram.y 历史。