47.66. pg_settings

pg_settings提供了对服务器运行时参数的访问。 它实际上是SHOWSET命令的另外一个接口。 它还提供一些用SHOW不能直接获取的参数的访问,比如最大和最小值。

Table 47-67. pg_settings 字段

名字 类型 描述
name text 运行时配置参数名
setting text 参数的当前值
unit text 参数的隐含单元
category text 参数的逻辑组
short_desc text 参数的一个简短的描述
extra_desc text 有关参数的额外的,更详细的描述
context text 设置这个参数的值要求的环境(见下文)
vartype text 参数类型(bool, enum, integer, real, string)
source text 当前参数值的来源
min_val text 该参数允许的最小值(非数字值为 null)
max_val text 这个参数允许的最大的数值(非数字值为 null)
enumvals text[] 枚举参数允许的值(非枚举值为null)
boot_val text 如果参数没有设置则为服务器启动时假设的参数值
reset_val text RESET在当前会话中将重设的参数值
sourcefile text 设置当前值的配置文件(从源码而不是配置文件设置值或当通过非超级用户检查时为null); 当在配置文件中使用include指令时是有帮助的。
sourceline integer 设置当前值的配置文件中的行编码 (从源码而不是配置文件设置值或当通过非超级用户检查时为null)

有几个context的可能值。以减少困难的改变设置的顺序,它们是:

internal

不能直接更改这些设置;它们反映了内部确定的值。其中的一些可以通过用不同的配置选项重建服务器, 或通过改变提供给initdb的选项来更改。

postmaster

这些选项只在服务器启动时使用,所以任何改变都需要重启服务器。这些设置的值通常存储在 postgresql.conf文件中,或当服务器启动时传递给命令行。 当然,带有任何低context类型的设置也可以在服务器启动时设置。

sighup

这些设置可以在postgresql.conf中改变而不用重启服务器。 发送一个SIGHUP信号到主进程使其重读postgresql.conf 并应用改变。主进程也将SIGHUP信号传递给它的子进程, 这样它们所有都使用新值。

backend

这些设置可以在postgresql.conf中改变而不用重启服务器; 它们也可以在连接需求包中为特定的会话设置(例如,通过libpq的 PGOPTIONS环境变量)。不过,这些设置在会话启动后永远不会改变。 如果你在postgresql.conf中改变了它们,那么发送一个SIGHUP 信号到主进程使其重读postgresql.conf。新值将只影响随后加载的会话。

superuser

这些值可以在postgresql.conf中设置,或在一个会话中通过SET 命令设置;但是只有超级用户可以通过SET改变它们。在postgresql.conf 中改变它们将只在没有会话本地值是使用SET建立的时影响现有会话。

user

这些值可以在postgresql.conf中设置,或在一个会话中通过SET 命令设置。允许任何用户改变他们的会话本地值。postgresql.conf 中的改变将只在没有会话本地值是使用SET建立的时影响现有会话。

参阅Section 18.1获取更多关于改变这些参数的各种方式的信息。

不能对pg_settings视图进行插入或者删除,但是可以更新。 对pg_settings中的一行进行 UPDATE 等效于在该命名参数上执行SET命令。这个修改只影响当前会话使用的数值。 如果在一个最后退出的事务中发出了UPDATE 命令,那么UPDATE 命令的效果将在事务回滚之后消失。一旦包围它的事务提交,这个效果将固化,直到会话结束, 除非由其它的UPDATESET命令覆盖。