pg_settings
视图pg_settings
提供了对服务器上运行时参数的访问。它本质上是SHOW和SET命令的可替换接口。它还提供了SHOW
不能提供的关于每一个参数的一些现实,例如最大值和最小值。
表 51.87. 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 | 参数的最小允许值(对非数字值为空) |
max_val | text | 参数的最大允许值(对非数字值为空) |
enumvals | text[] | 一个枚举参数的允许值(对非数字值为空) |
boot_val | text | 如果参数没有被别的其他设置,此列为在服务器启动时设定的参数值 |
reset_val | text | 在当前会话中,RESET 将会设置的参数值 |
sourcefile | text | 当前值被设置的配置文件(空值表示从非配置文件的其他来源设置,由不是超级用户也不是pg_read_all_settings 成员的用户检查时也为空值),在配置文件中使用include 指令时有用 |
sourceline | integer | 当前值被设置的配置文件中的行号(空值表示从非配置文件的其他来源设置,由不是超级用户也不是pg_read_all_settings 成员的用户检查时也为空值)。
|
pending_restart | boolean | 如果配置文件中修改了该值但需要重启,则为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
中的改变才会影响现有的会话。
更多关于修改这些参数的方法的信息请见第 19.1 节。
pg_settings
视图不能被插入或者从中删除,但是它可以被更新。在pg_settings
的一行上的一个UPDATE
等价于在该参数上执行一个SET命令。修改将只会影响当前会话使用的值。如果一个UPDATE
在一个后来中断的事务中被发出,UPDATE
命令的效果也会随着事务的回滚而消失。一旦所在的事务被提交,效果将一直保持到会话结束,除非有其他UPDATE
或 SET
重新修改它。