日期:2014-05-16 浏览次数:20483 次
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;