日期:2014-05-16  浏览次数:20448 次

pg启动过程中的那些事三:加载GUC参数

1 先上个图,看一下函数调用过程梗概,中间细节有略

?


????? GUC 参数初始化分两步,第一步先读取 buildin/ compiled-in GUC 参数默认值,这里包括全部的 GUC 参数,建立 GUC 参数相关结构变量,第二步读取 postgresql.conf 配置文件中的参数设置之。从上图中能看出来,这个读取并设置 postgresql.conf 中参数的过程还是挺复杂的。


2 初始化 GUC 相关数据结构并取 hardcode/buildin 的参数值。

?????? pg 里的GUC 参数按设置的值分五种类型,分别是boolintrealstringenum ,根据这五种类型,定义了五种结构类型,再根据这五种结构,每个类型建一个对应的静态数组,用于存储这些相应类型的GUC 参数。这五种类型是config_boolconfig_intconfig_realconfig_stringconfig_enum ,对应的静态数组是ConfigureNamesBoolConfigureNamesIntConfigureNamesRealConfigureNamesStringConfigureNamesEnum 。具体结构和数组定义见下面。

?

五个结构定义:

struct config_bool

{

??? struct config_generic gen;

??? /* these fields must be set correctly in initial value: */

??? /* (all but reset_val are constants) */

??? bool ??? ?? *variable;

??? bool ??????? boot_val;