1 插件代码分析
pageinspect是一个非常典型、简单的插件,大部分流程可以学习、复用。
如果需要写新的插件,可以直接copy修改下面两个函数,大部分框架代码可以直接使用。
get_raw_page读取页面的经典流程
get_raw_page只返回一行数据,所以无需走插件循环产生元组的流程。
读取页面的经典流程:
1、schema table名包装:makeRangeVarFromNameList 2、打开表:relation_openrv 3、读页面(返回pin住的页面):ReadBufferExtended 4、页面加锁:LockBuffer 5、读取数据:memcpy 6、页面解锁:LockBuffer 7、释放页面(unpin):ReleaseBuffer 8、关闭表:relation_close
代码语言:javascript复制get_raw_page
get_raw_page_internal(relname, MAIN_FORKNUM, blkno)
(1) relrv = makeRangeVarFromNameList(textToQualifiedNameList(relname))
textToQualifiedNameList:表名前加 public. 或 直接使用 schema.tablename
makeRangeVarFromNameList:{type = T_RangeVar, catalogname = 0x0, schemaname = 0x2ae57c8 "public", relname = 0x2ae58f8 "t81", inh = 1 '