今天就跟大家聊聊有关如何进行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配置参数值的变更有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/quanzl/blog/3082756