成都网站建设设计

将想法与焦点和您一起共享

如何进行PostgreSQL配置参数值的变更

今天就跟大家聊聊有关如何进行PostgreSQL配置参数值的变更,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

创新互联公司服务项目包括墨玉网站建设、墨玉网站制作、墨玉网页制作以及墨玉网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,墨玉网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到墨玉省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

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

1、参数值变更函数定义

void
SetConfigOption(const char *name, const char *value,
				GucContext context, GucSource source)

第一个参数是参数名,第二个是字符串表示的值,第三个是调用它的修改动作上下文,第四个是参数来源。

2、初始化时的两个例子

	SetConfigOption("transaction_deferrable", "no",
					PGC_POSTMASTER, PGC_S_OVERRIDE);

和读取环境变量(InitializeGUCOptionsFromEnvironment()

SetConfigOption("port", env, PGC_POSTMASTER, PGC_S_ENV_VAR);

读到一个 config_generic 结构体成员 vartype 是 PGC_BOOL,既可以知道它实际指向的是一个 config_bool 类型结构体。

SetConfigOption 只是封装调用 set_config_option,下边我们从后者的代码逻辑看参数各定义的作用。

3、函数 set_config_option 第三个参数

前边我们提到参数上下文,并且大家也知道有些参数是不允许启动后修改,就是这个上下文控制:

else if (context != PGC_POSTMASTER)
{
  ereport(elevel,
      (errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM),
       errmsg("parameter \"%s\" cannot be changed without restarting the server",
          name)));
  return 0;
}

参数修改方式可以知道它由什么方式(比如SET 命令)修改,也就知道修改时的上下文,与参数的定义比较,很容易就知道应该接受还是拒绝新值。

4、参数值的解析转换

设定的值其实都是字符串,也就是第二个参数const char *value,它需要转换成相应的值,比如枚举,折回去看枚举参数的定义:

  {
    {"backslash_quote", PGC_USERSET, COMPAT_OPTIONS_PREVIOUS,
      gettext_noop("Sets whether \"\\'\" is allowed in string literals."),
      NULL
    },
    &backslash_quote,
    BACKSLASH_QUOTE_SAFE_ENCODING, backslash_quote_options,
    NULL, NULL, NULL
  },

再来看 backslash_quote_options

static const struct config_enum_entry backslash_quote_options[] = {
	{"safe_encoding", BACKSLASH_QUOTE_SAFE_ENCODING, false},
	{"on", BACKSLASH_QUOTE_ON, false},
	{"off", BACKSLASH_QUOTE_OFF, false},
	{"true", BACKSLASH_QUOTE_ON, true},
	{"false", BACKSLASH_QUOTE_OFF, true},
	{"yes", BACKSLASH_QUOTE_ON, true},
	{"no", BACKSLASH_QUOTE_OFF, true},
	{"1", BACKSLASH_QUOTE_ON, true},
	{"0", BACKSLASH_QUOTE_OFF, true},
	{NULL, 0, false}
};

这里最后是由函数 parse_and_validate_value 进行检查和解析,有兴趣可以自行读代码。

5、带单位的值

shared_buffer = 128MB,我们应该都见过,它的定义是整数,由函数 parse_int 处理。它是内存单位(GUC_UNIT_BLOCKS),通过转换表 memory_unit_conversion_table 计算最终大小,也就是 shared_buffer 的转换定义:1MB = 1024 / (BLCKSZ / 1024) 个块。

看完上述内容,你们对如何进行PostgreSQL配置参数值的变更有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。


标题名称:如何进行PostgreSQL配置参数值的变更
当前网址:http://chengdu.cdxwcx.cn/article/jcdijc.html