- 客户端接口层(包括预处理以提高性能)
- 2.1 SQL解析阶段,libpg_query库,PostgresParser::Parse,SQL字符串转换为抽象语法树(AST)表示的 PGInsertStmt 节点
- 2.2 解析器检查表名、列名是否存在,类型是否匹配,处理默认值,构建 InsertStatement 对象,包含表引用、列信息
- 3.1 逻辑计划生成,创建 InsertPlan 逻辑计划节点
- 3.2 物理计划生成,生成 InsertExec 物理执行器,根据表类型(行存/列存)、分区情况选择最优执行策略
- 4.1 检查约束条件:通过 CheckInsert 函数验证CHECK约束,类型转换
- 4.2 事务处理,处理事务隔离级别,准备回滚日志(undo log)
- 4.3 执行器通过 TableDataSource 与存储层交互,包括单行插入和批量Batch插入提高性能,对于分区表,还需要确定目标分区
- 5.1 格式化行数据结构,处理NULL值和变长字段
- 5.2 查找合适的页面插入数据,必要时分配新页面,更新页面元数据。对于时序表,存储层有专门的处理ts_heap_insert_row
- 5.3 记录Redo日志,日志包含操作类型、表ID、行数据等。支持批量日志写入以提高性能
- 提交事务使其生效:刷新事务日志到磁盘,更新事务状态,释放锁资源,更新统计信息

被折叠的 条评论
为什么被折叠?



