2.4.2 配置参数(1)
在初始化内存环境之后,需要配置Postmaster运行时所需的各种参数。GUC(Grand Unified Configuration)模块实现了多种数据类型(目前有boolean、int、float、string四种)的变量配置。这些参数可能会由不同的进程在不同的时机进行配置,系统会根据既定的优先权来确定什么情况下的配置可以生效。
参数共有六种类型(通过枚举类型GucContext定义),并且只能在合适的环境下进行配置:
PGC_INTERNAL:参数只能通过内部进程设定,用户不能设定。
PGC_POSTMASTER:参数只能在Postmaster启动时通过读配置文件或处理命令行参数来配置。
PGC_SIGHUP:参数只能在Postmaster启动时配置,或当我们改变了配置文件并发送信号SIGHUP通知Postmaster或Postgres的时候进行配置。
PGC_BACKEND:参数只能在Postmaster启动时读配置文件设置,或由客户端在进行连接请求时设置。已经启动的后台进程会忽略此类参数的改变。
PGC_USERSET:可以在任何时候配置。
PGC_SUSET:参数只能在Postmaster启动时或由超级用户通过SQL语言(SET命令)进行设置。
下面这个枚举类型数据结构用于描述参数的来源,按照优先级从低到高的顺序排列,一个设置起作用当且仅当先前的设置优先级比当前的设置的优先级低或者相等(参见数据结构2.1)。
数据结构2.1 GUCSourcetypedef enum
typedef enum
{
PGC_S_DEFAULT, //参数设为默认值
PGC_S_ENV_VAR,//参数通过环境变量得到
PGC_S_FILE,//读配置文件得到
PGC_S_ARGV,//从Postmaster命令行得到
PGC_S_DATABASE,//数据库安装时指定
PGC_S_USER,//用户指定
PGC_S_CLIENT,//通过客户连接请求传送过来的数据包指定
PGC_S_OVERRIDE,//在特定情况下用来强制设定为默认值
PGC_S_INTERACTIVE,//仅仅是作为交互式来源和非交互式来源之间的分隔
PGC_S_TEST,//仅用于测试
PGC_S_SESSION//通过SET命令设置
}GucSource;//参数来源,按优先级递增的顺序排列
每一种数据类型的GUC参数都由两部分组成:共性部分和特性部分。共性部分的数据结构如数据结构2.2所示。
数据结构2.2 config_generic
struct config_generic
{
const char *name; //参数名
GucContext context;//参数类型
enum config_group group;//用于根据功能对参数进行分组
const char *short_desc; //参数简短描述
const char *long_desc;//参数详细描述
int flags;//参数标志
enum config_type vartype;//参数值的数据类型
intstatus;//参数状态
GucSource reset_source;//参数值为reset_value时参数的来源
GucSource source; //当前参数来源
GucStack *stack;//当修改发生时,用来保存旧值,以支持回滚
char *sourcefile;//配置所在的源文件
Intsourceline;//在源文件中的行号
};
其中参数的数据类型config_type有五种:PGC_BOOL(布尔型)、PGC_INT(整型)、PGC_REAL(实数)、PGC_STRING(字符串)和PGC_ENUM(枚举),枚举型是在8.3版本开始新加入的参数类型。
每一种具体的数据类型的参数都有其特性的数据结构,特性数据结构中的第一个项都是一个指向其共性数据结构的指针。整数型参数的特性部分如数据结构2.3所示。
数据结构2.3 config_int
struct config_int
{
struct config_generic gen; //参数的共性数据结构
int *variable;//参数当前被设置的值(所有特性结构都有此项)
intboot_val//参数的初始值
intreset_val;//重新设置时,如果用户未指定,则取该参数值
intmin;//参数值的下界
intmax;//参数值的上界
GucIntAssignHook assign_hook;//函数指针,用来设置reset_val
GucShowHook show_hook;//目前没有用到
};
【责任编辑:云霞 TEL:(010)68476606】