PostgreSQL如何配置参数处理系统
本篇文章为大家展示了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、参数所在上下文 context
(src/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 Locations19.3. Connections and Authentication 19.3.1. Connection Settings 19.3.2. Authentication 19.3.3. SSL
它们分别对应枚举 config_group
的:FILE_LOCATIONS
、CONN_AUTH
、CONN_AUTH_SETTINGS
、CONN_AUTH_AUTH
、CONN_AUTH_SSL
这个似乎没什么好解释。
6、参数描述 short_desc
和long_desc
定义简短和详细的变量说明
7、标志位 flags
定义配置参数的的行为,例如:
GUC_LIST_INPUT
输入可以是列表格式GUC_NO_SHOW_ALL
不包含在SHOW ALL命令的结果中
更多定义可查看src/include/utils/guc.h
8、其他成员的初始值
剩下的成员在数据库启动时初始化,guc.c
里的初始定义不包括它们(只看了一部分,应该是这样的)。
比如 vartype
表示配置参数的类型。
上述内容就是PostgreSQL如何配置参数处理系统,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。