一、系统表的创建时间
postgresql 调用initdb初始化数据库会进入bootstrap模式创建数据集簇,并读取postgres.bki来创建模板数据库(template1)。创建模板数据库过程中包含了系统表的创建。
二、系统表的创建机制
postgres.bki包含了bootstrap模式能识别的系统表操作语句。(包含创建,打开删除等)。在bootstrap下执行相关语句创建系统表。
三、如何生成postgres.bki
src/backend/catalog/目录下的genbki.pl会读取src/include/catalog/目录下的pg_*.h文件生成postgres.bki。
每个pg_*.h文件按照统一的规范定义了一个系统表。比如pg_class.h,pg_database.h等。
四、系统表的定义
pg_class.h结构介绍
每个系统表定义在src/include/catalog/pg_*.h文件中。主要包含三个部分。
1、CATALOG定义宏,用于以统一的模式去定义系统表。
2、 通过宏DATA(X)和DESCR(X)定义的insert操作。指系统表创建后立马插入的数据。