GUC: Grand Unified Configuration 指的是postgresql数据库的一种对数据库变量进行设置对数据库进行控制的机制。通常理解是对postgresql.conf文件中变量进行修改,或通过set命令对参数进行设置。但实际上GUC变量的种类,设置方法要更加复杂多样。在guc.h和guc.c中可以看到GUC变量的详细实现。
通常来讲,GUC变量的种类有很多种,涉及到数据库控制的各个层面。GUC变量包括变量所属的功能组、变量类型、来源和作用上下文(context)。这里简单说一下GUC变量的作用上下文。
上下文共分internal,postmaster,sighup,backend,suset,userset六种:
internal无法被用户修改,只能被内部进程设置,show命令能够查看此类变量。此类变量通常在编译时设置与改变。
postmaster在postmaster启动时通过读取configure文件或命令行来设置。这类变量的改变在postgresql重启时生效。
sighup在postmaster启动或向postmaster或backend进程发sighup信号来读取configure文件时设置。
backend在新backend进程启动时读取configure文件生效。
suset指超级用户修改生效,不需要重新读取configure文件。
user指普通用户修改生效,在当前会话下有效,无需读取configure文件。
几个常用的命令:
select * from pg_settings;
show variableName;
select pg_reload_conf();
pg_ctl -D PGDATA reload
kill -HUG processID
select name,source,settings from pg_settings where source != 'default' and source !='override' order by 2,1;