- 博客(55)
- 收藏
- 关注
原创 【ffmpeg】ffplay.c 代码解析
设计点说明三队列解耦PacketQueue / FrameQueue 把读、解码、渲染三个速度不同的环节解耦serial 淘汰seek/重启serial++,旧序列包帧自动失效,避免错乱主从时钟同步默认音频主;视频丢帧/重复贴音频;音频 swr 微调速(±10%)字幕被动随视频帧 pts 时间窗显示,搭视频便车对齐音频流控闭环队列满阻塞读线程,消费后cond唤醒;pktq反向回收 packet滤镜接入解码后、入帧队列前过滤镜链,含自动旋转硬件加速-hwaccel。
2026-08-26 14:14:38
205
原创 postgresql-pg_tde插件分析
pg_tde是一个 PostgreSQL 扩展,提供文件级静态数据加密(encryption at rest),对用户完全透明。提供tde_heap表访问方法,加密表数据(元组)、索引、TOAST、WAL(暂不加密临时文件与统计信息);通过Global Key Provider 接口支持多种密钥管理系统:本地 keyring 文件、HashiCorp Vault(KV v2)、KMIP 协议服务器;依赖提供的扩展 Storage Manager API 与 WAL API;
2026-08-19 17:17:44
237
原创 postgresql-分区表
PostgreSQL 分区表与继承表设计摘要 PostgreSQL 的分区表和继承表共享基础继承机制,但分区表在此基础上增加了专用元数据和优化路径: 共享基础:两者都使用 pg_inherits 记录父子关系,共用继承树遍历基础设施 分区增强: 通过 pg_partitioned_table 存储分区策略和键定义 使用 pg_class.relpartbound 记录分区边界 规划器和执行器实现专用裁剪和路由逻辑 强约束分区结构(不重叠、完整性) 关键区别: 继承表侧重模式复用和查询扩展 分区表强调自动路由
2026-05-16 18:13:14
442
原创 postgresql plancache
本文档详细介绍了PostgreSQL中plancache模块的设计与实现。plancache主要用于优化SQL语句的重复执行,通过缓存执行计划避免重复解析和生成。核心内容包括: 模块职责:缓存查询源信息、执行计划,跟踪依赖关系,处理失效机制,并在通用计划和定制计划间动态选择。 关键数据结构: CachedPlanSource:保存SQL文本、语法树、Query树等查询源信息 CachedPlan:存储可执行计划对象 CachedExpression:表达式级别的小型缓存 主要功能: 支持PREPARE/EX
2026-05-09 16:46:52
463
原创 postgresql acl权限检查
PostgreSQL权限管理摘要 PostgreSQL使用ACL(访问控制列表)系统管理对象权限。新创建对象默认仅所有者可操作,需显式授权其他角色。权限类型包括SELECT、INSERT、UPDATE等,具体取决于对象类型。通过GRANT/REVOKE命令管理权限,PUBLIC角色可授予所有用户。 核心实现是在系统表中存储AclItem数组,记录授权者、被授权者和权限位(ai_privs)。执行操作时检查所需权限是否在AclItem中存在。权限检查通常在查询初始化阶段完成,通过位运算验证用户权限。 不同对象
2026-03-23 15:10:11
491
原创 postgresql resourceowner
资源所有者机制是PostgreSQL用于跟踪和管理查询资源(如缓冲区引用、表锁等)的核心模块。其主要特点包括: 层次结构设计:采用类似内存上下文的树形结构,支持父子资源所有者的自动资源传递和释放。 生命周期管理:为事务、子事务和Portal创建独立资源所有者,确保资源在查询结束(包括异常情况)时可靠释放。 资源分类: 事务可见资源(如缓冲区) 本地可见资源(如临时文件) 锁资源(特殊处理,事务提交时传递而非释放) 实现方式: 使用ResourceArray动态数组跟踪各类资源 提供标准API进行资源关联/取
2026-02-27 18:08:30
657
原创 postgresql 执行器中readme的翻译
如果获取的元组中的行标识列为 NULL,则源关系包含一个不被目标表中的任何元组匹配的元组,因此给定计划返回的元组评估每个 WHEN NOT MATCHED 子句的限定表达式。为了实现这种检查,实际上我们从头开始为每个修改的元组(或元组集,对于 SELECT FOR UPDATE)重新运行查询,其中关系扫描节点被调整为仅返回当前元组——要么是原始元组,要么是修改的元组的更新(现在已锁定)版本。如果是这样,我们从修改的元组重新生成更新的元组(如果我们正在执行 UPDATE),最后更新/删除修改的元组。
2026-01-12 18:42:50
682
原创 postgresql源码阅读 search_path
plancache用来缓存执行计划,当searchpath改变时,查询语句可能涉及对象变更,对应的执行计划也应不一致,plancache中保存了一份当时的SearchPath,用来验证当前执行计划是否还有效。对于ddl语句,分布在ddl的处理逻辑中,大多数场景同一事务内首次做了recompute,之后都是validate的状态,只需要做判断即可。临时表通过关联ns实现,每个会话有自己独立的tmp_ns,在事务提交时级联删除ns中的内容,或者会话结束时删除,实现临时表的删除。计算赋值searchpath。
2025-12-08 11:50:16
780
原创 ivorysql 源码分析-双port兼容
ivorysql采用双端口的方式实现oracle兼容,默认的5432端口为pg语法,1532用来支持oracle的语法与功能,从官方的流程图上看是支持oracle应用连接的,但是貌似没有支持oracle的协议,以下为支持oracle兼容模式的提交的commit。生成不同语法解析函数:%name-prefix=“base_yy” 代表生成的函数和变量名从yy改成base_yy,同flex,为了在一个产品里使用多个语法分析器,分析不同的数据类。 原文件基本复制的plpgsql,做了部分文件名等修改。
2025-12-04 14:46:20
960
原创 babelfish for postgresql 分析--babelfishpg_tds--doing
babelfishpg_tds插件 支持了TDS 协议扩展,实现 TDS 客户端-服务器协议。先看插件加载时的函数。
2025-09-30 15:52:34
727
原创 babelfish for postgresql 分析--todo
tds.c/tds_srv.c/tdsprotocol.c/tdsresponse.c/….c/.h(pl_comp、pl_exec、pl_funcs、pl_handler 等):PL/tsql 的编译、执行、内置函数与处理器;spatialtypes.c/.h + geo_parser.y/geo_scan.l:空间类型支持(geometry/geography)。catalog.c/.h、multidb.c/.h:逻辑数据库与模式映射、对象目录适配(db.schema.object)。
2025-09-28 17:10:00
1003
原创 postgresql中的默认列
default的语法规则在ColConstraintElem下,解析时会解析为Constraint,contype为CONSTR_DEFAULT 存在ColumnDef->constraints下。语义分析对应constraint 并且把表达式结果序列化插入pg_attrdef表中。default语法表达式赋值给raw_default。在重写阶段将表达式赋给对应value。
2025-09-26 16:00:39
280
原创 postgresql flex bison
https://my.oschina.net/postgresqlchina/blog/5065475
2025-06-30 17:07:53
392
原创 postgresql 权限管理
记录的缓存将在 pg_auth_members (for roles_is_member_of()) pg_database (for roles_is_member_of())表更改时失效。默认缓存当前活跃用户(current user)的角色成员关系,但未来可能扩展为支持多角色缓存。遍历查找给定角色ID的所有直接和间接成员关系,并给cache赋值。以上为执行权限的种类以及适用对象合在系统表中显示的缩写。对象可赋予的访问权限。
2025-06-27 11:03:33
307
1
原创 postgresql sort算子
sort算子执行主要把outerplan取到的数据存到tuplesortstate中,在tuplesort中排序后返回。
2025-06-09 17:49:36
237
原创 cmu 15-445 2024fall lab1 buffer pool manager
因为我的脏页是evict时才会淘汰,evict时把page_table中的脏页映射删除,然后放bpm锁,然后刷脏,这是如果有操作访问旧页,因为页面映射已经被删除回去读磁盘,这时脏页不一定落盘,会导致数据还未写入磁盘读取到不一致的数据,于是新增了一个map用来保存脏页id,如果访问的是正在刷新脏页的话sleep一会,刷新完毕再更新map,优先淘汰访问次数小于k的,一个是访问次数小于k时淘汰第一次访问时间距离当前最远的,大于k时,淘汰最后一次访问时间距离当前最远的。又把frame的锁放在 bmp锁后解锁。
2025-06-01 21:57:17
405
原创 postgresql RecursiveUnion算子
RecursiveUnion算子需要结合inner plan中的worktablescan来处理递归。
2025-05-28 18:55:56
256
原创 postgresql 创建表
create table不需要语法分析,analyze_and_rewrite时直接生成对应的query,在processutility阶段做语法分析后执行。
2025-05-15 18:27:55
299
原创 postgresql unique算子
unique一般用于处理distinct关键字 unique与group一样处理已排好序的tuples,当获取到与上条不一样的tup时 返回投影。
2025-05-13 16:56:05
156
原创 postgresql 执行器junkfilter
junkfilter用于过滤在targetlist中不显示的列。执行 对ExecProcNode返回的slot过滤。
2025-05-07 18:42:15
388
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅