千家信息网

PostgreSQL如何配置参数处理系统

发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,本篇文章为大家展示了PostgreSQL如何配置参数处理系统,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。配置参数(或者叫GUC变量,grand unifie
千家信息网最后更新 2024年11月30日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、参数所在上下文 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 Locations19.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 表示配置参数的类型。

上述内容就是PostgreSQL如何配置参数处理系统,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

0