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;