51.85. pg_settings

视图pg_settings提供对服务器运行时参数的访问。它实际上是SHOWSET命令的替代接口。它还提供对每个参数的某些事实的访问,这些事实不能从SHOW直接获得,例如最小值和最大值。

表 51.86. pg_settings

NameTypeDescription
nametext运行时配置参数名称
settingtext参数的当前值
unittext参数的隐式单位
categorytext参数的逻辑组
short_desctext参数的简要说明
extra_desctext参数的其他更详细的描述
contexttext设置参数值所需的上下文(请参见下文)
vartypetext参数类型(boolenumintegerrealstring)
sourcetext当前参数值的来源
min_valtext参数的最小允许值(非数值为空)
max_valtext参数的最大允许值(非数值为空)
enumvalstext[]枚举参数的允许值(非枚举值为 null)
boot_valtext如果未另外设置参数,则在服务器启动时假定参数值
reset_valtextRESET会将参数重置为当前会话中的值
sourcefiletext设置当前值的配置文件(对于从配置文件以外的其他来源设置的值,或者由既不是超级用户也不是pg_read_all_settings成员的用户检查的值,则为 null);在配置文件中使用include指令时很有帮助
sourcelineinteger配置文件中的行号,当前值设置为该值(对于从非配置文件的源设置的值,或者由既不是超级用户也不是pg_read_all_settings成员的用户检查的值,则为空)。
pending_restartbooleantrue如果配置文件中的值已更改,但需要重新启动;否则false

context有几种可能的值。为了降低更改设置的难度,它们是:

  • internal

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

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

    • 可以在postgresql.conf中更改这些设置,而无需重新启动服务器。将 SIGHUPsignal 发送给邮局主管,以使其重新读取postgresql.conf并应用更改。邮政局长还将 SIGHUPsignal 转发给其子进程,以使它们都获取新值。
  • superuser-backend

    • 可以在postgresql.conf中更改这些设置,而无需重新启动服务器。也可以在连接请求数据包中为特定会话设置它们(例如,通过 libpq 的PGOPTIONS环境变量),但前提是连接用户是超级用户。但是,这些设置在会话启动后永远不会改变。如果您在postgresql.conf中更改它们,请将 SIGHUPsignal 发送给邮局主管,以使其重新读取postgresql.conf。新值将仅影响随后启动的会话。
  • backend

    • 可以在postgresql.conf中更改这些设置,而无需重新启动服务器。也可以在连接请求包中为特定会话设置它们(例如,通过 libpq 的PGOPTIONS环境变量);任何用户都可以对其会话进行此类更改。但是,这些设置在会话启动后永远不会改变。如果您在postgresql.conf中更改它们,请将 SIGHUPsignal 发送给邮局主管,以使其重新读取postgresql.conf。新值将仅影响随后启动的会话。
  • superuser

    • 这些设置可以从postgresql.conf设置,也可以在会话中通过SET命令设置;但只有超级用户可以通过SET进行更改。 postgresql.conf中的更改仅在未使用SET构建会话本地值的情况下才会影响现有会话。
  • user

    • 这些设置可以从postgresql.conf设置,也可以在会话中通过SET命令设置。允许任何用户更改其本地会话值。 postgresql.conf中的更改仅在未使用SET构建会话本地值的情况下才会影响现有会话。

有关更改这些参数的各种方法的更多信息,请参见Section 19.1

pg_settings视图不能插入或删除,但可以更新。应用于pg_settings行的UPDATE等效于对该命名参数执行SET命令。更改仅影响当前会话使用的值。如果在事务中发出UPDATE且随后中止该事务,则回滚该事务时UPDATE命令的作用会消失。一旦提交了周围的事务,效果将一直持续到会话结束,除非被另一个UPDATESET覆盖。