pg_settings

pg_settings视图提供了对服务器上运行时参数的访问。

简介

pg_settings本质上是SHOWSET命令的可替换接口。它还提供了SHOW不能提供的关于每一个参数的一些信息,例如,最大值和最小值。

pg_settings视图包含以下列信息:

列名称

类型

描述

name

text

运行时配置的参数名。

setting

text

参数的当前值。

unit

text

参数的隐式单元。

category

text

参数的逻辑组。

short_desc

text

参数的短描述。

extra_desc

text

附加的参数的详细描述。

context

text

设置此参数值的上下文。

vartype

text

参数类型,取值包括:boolenumintegerrealstring

source

text

当前参数值的来源。

min_val

text

参数的最小允许值(对非数字值为空)。

max_val

text

参数的最大允许值(对非数字值为空)。

enumvals

text[]

一个枚举参数的允许值(对非数字值为空)。

boot_val

text

如果参数没有进行其他设置,此列为在服务器启动时设定的参数值。

reset_val

text

在当前会话中,RESET将会设置的参数值。

sourcefile

text

当前值被设置的配置文件(空值表示从非配置文件的其他来源设置,不是超级用户也不是pg_read_all_settings成员的用户检查时也为空值),在配置文件中使用include指令时有用。

sourceline

int4

当前值被设置的配置文件中的行号(空值表示从非配置文件的其他来源设置,不是超级用户也不是pg_read_all_settings成员的用户检查时也为空值)。

pending_restart

bool

如果配置文件中修改了该值但需要重启,则为true,否则为false

对于context有多种可能的取值,取值如下:

  • internal:这些设置不能被直接修改,它们反映了内部决定的值。某些可能在使用不同配置选项重建系统时或者改变initdb的选项时可以调整。

  • postmaster:这些设置只能在服务器启动时应用,因此任何修改都需要重启服务器。这些设置的值通常都存储在postgresql.conf文件中,或者在启动服务器时通过命令行传递。具有更低context类型的设置也可以在服务器启动时间被设置。

  • sighup:对于这些设置的修改可以在postgresql.conf中完成并且不需要重启服务器。发送一个SIGHUP信号给postmaster会导致它重新读取postgresql.conf并应用修改。Postmaster将会把SIGHUP信号传递给它的子进程,这样它们也会获得新的值。

  • superuser-backend:对于这些设置的更改可以在postgresql.conf中进行而无需重启服务器。也可以在连接请求包(例如,通过libpq的PGOPTIONS环境变量)中为一个特定的会话设定它们,但是只有在连接用户是超级用户时才能操作。如果在会话启动后这些设置就不会改变。如果在postgresql.conf改变了它们, 向postmaster发送一个SIGHUP信号让postmaster重新读取postgresql.conf。新的值将只会影响后续启动的会话。

  • backend:对于这些设置的修改可以在postgresql.conf中完成并且不需要重启服务器。它们也可以在一个连接请求包(例如,通过libpq的PGOPTIONS环境变量)中为一个特定会话设置 ,任何用户都可以为这个会话做这种修改。然而,这些设置在会话启动后不会发生变化。如果在postgresql.conf中修改它们,可以向postmaster发送一个SIGHUP信号让它重读postgresql.conf。新值只会影响后续启动的会话。

  • superuser:这些设置可以从postgresql.conf设置,或者在会话中用SET命令设置。仅当没有通过SET设置会话本地值时,postgresql.conf中的改变才会影响现有的会话。

  • user:这些设置可以从postgresql.conf设置,或者在会话中用SET命令设置。任何用户都被允许修改它们的会话本地值。仅当没有通过SET设置会话本地值时,postgresql.conf中的改变才会影响现有的会话。

说明

pg_settings视图不能被插入或者从中删除,但是可以被更新。在pg_settings的一行上的一个UPDATE等价于在该参数上执行一个SET命令。修改将只会影响当前会话使用的值。如果一个UPDATE在一个后来中断的事务中被发出,UPDATE命令的效果也会随着事务的回滚而消失。一旦所在的事务被提交,效果将一直保持到会话结束,除非有其他UPDATESET重新修改它。