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

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

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

?


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


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

?????? pg 里的GUC 参数按设置的值分五种类型,分别是bool 、int 、real 、string 、enum ,根据这五种类型,定义了五种结构类型,再根据这五种结构,每个类型建一个对应的静态数组,用于存储这些相应类型的GUC 参数。这五种类型是config_bool 、config_int 、config_real 、config_string 、config_enum ,对应的静态数组是ConfigureNamesBool 、ConfigureNamesInt 、ConfigureNamesReal 、ConfigureNamesString 、ConfigureNamesEnum 。具体结构和数组定义见下面。

?

五个结构定义:

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;