[编写]PostgreSQL配置参数处理系统(一)通用结构体

 

配置参数(或者叫GUC变量,grand unified configuration)常见的就是出现在 postgresql.conf 中的设置项,更多信息可查看文档 19. Server Configuration ,本系列主要讲他们在代码中如何设置和发挥作用。

这个感觉要讲清楚内容会很多,分几篇写,本篇主要讲通用结构体各成员含义。

1、配置参数类型

布尔、整形、浮点(双精度)、字符串、枚举

每个类型有自己的定义结构体,同时它们又有一个通用结构体,见下。

 

2、参数定义通用结构体(src/include/utils/guc_tables.h

struct config_generic
{
  /* constant fields, must be set correctly in initial value: */
  const char *name;     /* name of variable - MUST BE FIRST */
  GucContext  context;    /* context required to set the variable */
  enum config_group group;  /* to help organize variables by function */
  const char *short_desc;   /* short desc. of this variable's purpose */
  const char *long_desc;    /* long desc. of this variable's purpose */
  int     flags;      /* flag bits, see guc.h */
  /* variable fields, initialized at runtime: */
  enum config_type vartype; /* type of variable (set only at startup) */
  int     status;     /* status bits, see below */
  GucSource source;     /* source of the current actual value */
  GucSource reset_source; /* source of the reset_value */
  GucContext  scontext;   /* context that set the current value */
  GucContext  reset_scontext; /* context that set the reset value */
  GucStack   *stack;      /* stacked prior values */
  void     *extra;      /* "extra" pointer for current actual value */
  char     *sourcefile;   /* file current setting is from (NULL if not
                 * set in config file) */
  int     sourceline;   /* line in source file */
};

下边挑重要的几项逐个讲解它们的作用。

 

3、配置参数名 name

无需多言

 

4、参数所在上下文 contextsrc/include/utils/guc.h

typedef enum
{
  PGC_INTERNAL,
  PGC_POSTMASTER,
  PGC_SIGHUP,
  PGC_SU_BACKEND,
  PGC_BACKEND,
  PGC_SUSET,
  PGC_USERSET
} GucContext;

INTERNAL不允许修改,或者说不允许编译后修改,部分参数是可以在编译时定义的,比如块大小。编译完成后如果修改编译出新程序,很可能会造成无法启动已经初始化好的data cluster。
简单说,这类参数只允许 show 命令查看。

POSTMASTER只能在数据库启动时设置,启动后及时修改也不会起作用,例如前边文章提到的配置参数shared_buffers,修改它重新载入配置文件只会得到提示信息:parameter "shared_buffers" cannot be changed without restarting the server

SIGHUP可以在数据库启动时修改,或者使用HUP信号(命令pg_ctl reload)修改。它们不能在后端启动(连接参数,有兴趣可阅读StartupPacket部分代码)时或者在会话中(SET命令)修改。

config_generic 结构体定义前的注释写得很清楚,上下文定义参数允许在什么场景下修改。

5、分类 group

在文档里可以清楚的看到参数的分类,以v11文档为例:

19.2. File Locations
19.3. Connections and Authentication
    19.3.1. Connection Settings
    19.3.2. Authentication
    19.3.3. SSL

它们分别对应枚举 config_group 的:FILE_LOCATIONSCONN_AUTHCONN_AUTH_SETTINGSCONN_AUTH_AUTHCONN_AUTH_SSL

这个似乎没什么好解释。

 

6、参数描述 short_desclong_desc

定义简短和详细的变量说明

 

7、标志位 flags

定义配置参数的的行为,例如:

GUC_LIST_INPUT 输入可以是列表格式GUC_NO_SHOW_ALL 不包含在SHOW ALL命令的结果中

更多定义可查看src/include/utils/guc.h

 

8、其他成员的初始值

剩下的成员在数据库启动时初始化,guc.c里的初始定义不包括它们(只看了一部分,应该是这样的)。

比如 vartype 表示配置参数的类型。

 

未完待度 ……

 

 

欢迎关注我的公众号,文章同步发布。

 

转载于:https://my.oschina.net/quanzl/blog/3080334

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值