postgres 的参数分为四类
1. internal
编译时确定,不能修改,如 block_size
2. 系统级
修改配置文件,需要重启才能生效如 max_connections
3. 全局级
会话中设置,所有会话都会立即生效
4. 会话级
会话中设置,只在当前会话生效
- internal 级的参数是不能修改的
- 全局级只能修改配置文件,重启系统
- 系统级使用 ALTERT SYSTEM 设置后会修改配置文件,此时向主进程发送 sighup 信号,主进程在 reaper 中将 sighup 再发送给各个子进程,在各个子进程的信号处理函数中将 got_SIGHUP = true,
同时在其主流程中有如下判断:
if (got_SIGHUP)
{
got_SIGHUP = false;
ProcessConfigFile(PGC_SIGHUP);
...
}
经过 ProcessConfigFile, 各个进程重新 load configure 文件,使参数生效
会话级参数,在set 之后,直接修改其进程的参数值就立即生效了。