多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 47.66\. `pg_settings` `pg_settings`提供了对服务器运行时参数的访问。 它实际上是[SHOW](#calibre_link-509)和[SET](#calibre_link-675)命令的另外一个接口。 它还提供一些用`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](#calibre_link-1149)获取更多关于改变这些参数的各种方式的信息。 不能对`pg_settings`视图进行插入或者删除,但是可以更新。 对`pg_settings`中的一行进行 `UPDATE` 等效于在该命名参数上执行[SET](#calibre_link-675)命令。这个修改只影响当前会话使用的数值。 如果在一个最后退出的事务中发出了`UPDATE` 命令,那么`UPDATE` 命令的效果将在事务回滚之后消失。一旦包围它的事务提交,这个效果将固化,直到会话结束, 除非由其它的`UPDATE`或`SET`命令覆盖。