数据初始化内部流程:bootstrap模式实现了一个特殊的语言用于解析BKI数据,语言的法语解析器会逐个token处理,遇到一个语法子句就调用相应的函数:遇到proname,创建字段属性;遇到name,创建字段类型;遇到Insert,插入一个tuple,tuple里面又是该tuple的每个字段的值,所以遇到值时InsertOneValue,整个tuple字段值都处理完后,执行InsertOneTuple插入一个tuple。

BKI文件

BKI文件本身由genbki.pl在编译和安装时创建,该Perl脚本解析src/include/catalog特殊格式的C头文件,并创建名字为postgres.bki的BKI文件。BKI会创建70多个数据库最重要的表,其中有四个比较特殊:pg_proc/pg_type_pg_attribute/pg_class,其他表如:pg_attrdef/pg_inherits/pg_index/pg_operator/pg_am等。前四个表创建方式最特殊,直接在磁盘上创建,不会走正常的创建table的代码流程,其他表会走boot_openrel()代码。

pg_filenode.map

对于大多数表而言,它的物理文件名字由pg_class.relfilenode标识。对于重要的catalog表,比如pg_class则使用特殊的catalog_oid到filenode id的映射文件pg_filenode.map来标记。