有一堆配置参数可以影响数据库系统的行为。 我们在这里描述一下如何设置它们,然后在下一章我们将逐个讨论它们。
所有参数名都是大小写不敏感的。每个参数都可以接受四种类型之一:布尔, 整数,浮点数和字符串。布尔值可以是 ON,OFF, TRUE,FALSE, YES,NO, 1,0 (大小写无关)或这些东西的任意清晰无歧义的前缀。
设置这些选项的一个方法是在数据目录里比如(在那里安装着一个缺省文件)创建一个文件 postgresql.conf 比如,下面是一个该文件的例子:
# 这是一个注释 log_connections = yes syslog = 2 search_path = '$user, public'
象你看到的那样,选项是每条一行。选项名和值之间的等号是可选的。 空白和空行被忽略。井号(#)用做任何地方引入注释。
每次postmaster收到SIGHUP(最简单的发送方法就是使用 pg_ctl reload)。 信号后都会重新读取这个配置文件。 postmaster同时也将这个信号广播给所有正在运行的服务器进程,这样现有会话也能得到新的缺省。 另外,你可以只向一个服务器进程直接发送信号。
第二种设置这些配置参数的方法是把它们作为命令行参数传递给postmaster, 比如:
postmaster -c log_connections=yes -c syslog=2
命令行选项覆盖任何与 postgresql.conf 冲突的选项。
有时候,给某一个特定会话一个命令行参数也是很有用的。 可以在客户端使用环境变量 PGOPTIONS 来实现这个目的:
env PGOPTIONS='-c geqo=off' psql
(这个选项可以用于任何基于libpq的客户端应用,不光是 psql。) 请注意,这个变量对那些需要在服务器启动后固定的选项是无效的,比如端口号。
一些选项可以用 SET 在独立的 SQL 会话中修改, 方法是使用 SET 命令, 比如:
SET ENABLE_SEQSCAN TO OFF;
如果允许用 SET 设置,这种每数据库的设置覆盖任何来自 postmaster 命令行选项或者配置文件的设置。超级用户允许比普通用户 SET 更多的数值。
SHOW 命令允许检查所有参数的当前值。
我们也可以用虚表 pg_settings 来显示和更新当前会话的运行时参数。 (在 Section 43.34 里描述)。 它等效于 SHOW 和 SET,但是用起来更方便,因为它可以和其它表连接起来使用, 或者用任意用户需要的选择条件来查询。
如果这个设置为真,那么服务器激昂接受 TCP/IP 连接。 否则只接受本地的 Unix 域套接字。它缺省是关闭。这个选项只能在服务器启动的时候设置。
决定和数据库连接的并发连接数目的最大值。缺省通常是 100,但是如果你的内核设置不支持这么大(在 initdb 的时候判断), 可能会比这个数少。这个参数只能在服务器启动的时候设置。
增大这个参数可能导致 PostgreSQL 要求更多的 System V 共享内存或者信号灯, 可能超过你的操作系统缺省配置的许可值。必要的话,参阅 Section 16.5.1 获取有关如何调节这个参数的信息。
决定为 PostgreSQL 超级用户连接而保留的"连接槽位"。 一次最多可以同时激活 max_connections 个连接。 在活跃的并发连接到了 max_connections 减去 superuser_reserved_connections 的时候, 新的连接就只能由超级用户发起了。
缺省值是 2。这个值必须小于 max_connections 的值。 这个参数只能在服务器启动的时候设置。
服务器监听的 TCP 端口;缺省是 5432。这个选项只能在服务器启动的时候设置。
声明服务器监听客户端应用连接来临的 Unix 域套接字的目录。 缺省通常是 /tmp,但是缺省值可以在制作的时候修改。
设置 Unix 域套接字的组所有者。(套接字的所属用户总是启动服务器的用户。) 与选项 unix_socket_permissions 一起,就可以用于控制套接字类型的附加的访问控制。 缺省的时候,这是一个空字串,表示使用当前用户的缺省组。这个选项只能在服务器启动的时候设置。
设置 Unix 域套接字的访问权限。Unix 域套接字使用普通的 Unix 文件系统权限集。 这个选项值应该是数值的形式,也就是那种系统调用 chmod 和 umask 接受的形式。(要使用客户化的八进制格式,数字必须以0 (零)开头。)
缺省的权限是 0777,意思是任何人都可以连接。 合理的候选是 0770(只有用户和同组的人可以访问, 又见 unix_socket_group)和 0700 (只有用户)。(请注意,对于 Unix 域套接字,只有写权限有意义,设置或者撤销读和执行权限没有任何意义。)
这个访问控制机制与 Chapter 19 里描述的独立。
这个选项只能在服务器启动的时候设置。
声明服务器监听到访连接的服务器名字或者 IP 地址。 缺省是监听所有已配置的地址(包括 localhost)。
声明 Rendezvous 广播地址。缺省的时候,使用计算机名,声明是 ''。
完成客户端认证的最长时间,以秒计。如果一个客户端没有在这段时间里完成认证协议, 服务器将中断连接。这样就避免了出问题的客户端无限制地占据连接资源。 这个选项只能在服务器启动的时候设置或者在 postgresql.conf 里设置。 缺省是 60。
打开 SSL 连接。请在使用这个选项之前阅读 Section 16.7。 缺省是关。
在 CREATE USER 或者 ALTER USER 里声明一个口令, 而又没有写 ENCRYPTED 或者 UNENCRYPTED 的时候,这个选项决定口令是否要加密。 缺省是打开(加密口令)。
设置 Kerberos 服务器键字文件的位置。参阅 Section 19.2.3 获取细节。
这样就允许每个数据库的用户名。缺省是关闭的。
如果这是打开的,你应该像 username@dbname 这样创建用户。 在给一个正在连接的客户端传递 username 的时候,必须给用户名附加 @ 和数据库名字, 然后服务器查找该数据库相关的用户名字。请注意,如果你在 SQL 环境里创建包含 @ 的名字时, 你需要引起用户名。
打开这个选项之后,你还是能够创建普通的全局用户。 只要在客户端声明用户的时候附加一个 @ 即可。 在服务器查找这个用户名之前,这个 @ 会被剥除。
注意: 这个特性只是临时试验用途,直到找到一个完全的解决方案。 那个时候,这个选项将被删除。
设置数据库服务器将使用的共享内存缓冲区数量。缺省通常是 1000, 如果你的内核设置不支持这么大,那么可以少些(在 initdb 的时候决定)。 每个缓冲区大小的典型值是 8192 字节。这个数值必须大于 16, 并且至少是 MAX_CONNECTIONS 数值的两倍;不过,这个数值大一些通常可以改进性能。 对于生产安装,我们通常建议是几千。 这个选项只能在服务器启动的时候设置。
增大这个参数可能导致 PostgreSQL 要求更多 System V 的共享内存, 超出你的操作系统配置许可的范围。必要时请参阅 Section 16.5.1 获取如何调整这些参数的信息。
声明内部排序操作和散列表在开始使用临时磁盘文件之前使用的内存数目。 数值是以千字节为单位的,缺省是 1024 千字节(1 MB)。 请注意对于复杂的查询,可能会同时运行好几个排序或者散列操作; 每个都会被批准使用这个参数声明的这么多内存,然后才会开始求助于临时文件。 同样,好几个正在运行的会话可能会同时进行排序操作。因此使用的总内存可能是 sort_mem 的好几倍。 在 ORDER BY,融合连接,以及 CREATE INDEX 里都要用到排序操作。 散列表在散列连接,散列为基础的聚集,以及散列为基础的 IN 子查询处理中都要用到。 因为在恢复数据库的时候用到 CREATE INDEX,所以在恢复一个大的数据库的之前增大 sort_mem 可以改善性能。
声明 VACUUM 用于跟踪要被恢复使用的(旧)行的最大内存树。 数值以千字节计,缺省是 8192 kB。增大这个值可以提高那些有大量被删除行的大表的清理速度。
设置在共享的自由空间映射表里自由空间会跟踪的最大数目的磁盘页面数。 每个页面槽位需要消耗六个字节的共享内存。这个设置必须大于 16 * max_fsm_relations。 缺省是 20000。这个选项只能在服务器启动的时候设置。
设置自由空间将在共享地自由空间映射里跟踪的最大数目的关系(表和索引)。 每个槽位大概要使用五十字节左右。缺省是 1000。这个选项只能在服务器启动的时候设置。
设置每个服务器进程允许同时打开的最大的文件数目。缺省是 1000。 实际使用的限制实际上是这个设置值和 sysconf(_SC_OPEN_MAX) 之间的最小值。 因此,在那些 sysconf 返回一个合理的限制的系统上, 你不用操心这个设置。但是在一些平台上(特别指出的是,大多数 BSD 系统), sysconf 返回一个系统真正可以支持的数目大的多的数值。 如果你发现有 "Too many open files" 这样的失败现象,那么就尝试缩小这个设置。 这个选项只能在服务器启动或者在 postgresql.conf 配置文件里设置; 如果修改了配置文件,那么它只影响随后启动的服务器子进程。
这个变量声明一个或者多个在服务器启动的时候预先装载的共享库。 可以选择在装载每个库的时候调用一个无参数的初始化函数。 要声明这个函数,可以在库名字后面加一个冒号,然后增加一个初始化函数名字。 比如 '$libdir/mylib:mylib_init' 会预先装载 mylib 并且执行 mylib_init。 如果装载了多过一个库,用逗号分隔它们。
如果没有找到 mylib 或者 mylib_init,那么服务器将启动失败。
可以用这个方法预先装载 PostgreSQL 的过程语言库, 通常是使用 '$libdir/plXXX:plXXX_init' 语法,这里的 XXX 是 pgsql,perl,tcl,或者 python。
通过预先装载一个共享库(以及在需要的时候初始化它), 我们就可以避免第一次使用这个库的那些启动时间。不过,启动每个服务器进程的时间可能会增加, 即使进程从来没有使用过这些库也这样。
又见 Section 25.3 获取 WAL 调节的细节。
如果这个选项是打开,那么 PostgreSQL 服务器将在好几个地方使用 fsync() 系统调用来确保更新已经物理上写到磁盘中。 这样就保证了数据库集群将在操作系统或者硬件崩溃的情况下恢复到一个一致的状态。 (数据库服务器自身的崩溃和这个无关。)
不过,使用 fsync() 会对性能有影响: 在事务提交的时候,PostgreSQL 必须等待操作系统吧预写日志刷新到磁盘上。 在关闭 fsync 的时候,操作系统可以尽可能优化缓冲,排序和推迟写动作。 这样可以显著提高性能。不过,如果系统崩溃,最后提交的几个事务的结果可能部分或者全部丢失。 最糟糕的情况是可能出现不可恢复的崩溃。
因为涉及的风险太高,fsync 的设置没有普适的原则。 有些管理员总是关闭 fsync,而其它一些只是在批量装载的时候关闭它, 因为这个时候,如果出现了错误,那么就有个明确的重新开始的点, 而另外一些管理员总是打开 fsync。 缺省是打开fsync,目的是最大限度的可靠性。 如果你信任你的操作系统,你的硬件,以及你的工具公司(或者你的备份电池), 你可以考虑关闭 fsync。
这个选项只能在服务器启动或者 postgresql.conf 文件里设置。
用来向磁盘强制更新 WAL 数据的方法。可能的值是 fsync(每次提交的时候调用 fsync()), fdatasync(每次提交的时候调用 fdatasync()), open_sync(带着 open() 选项 O_SYNC 写 WAL 文件),以及 open_datasync(带着 open() 选项 O_DSYNC 写 WAL 文件)。 不是在所有系统上都能使用上面四种选项。这个选项只能在服务器启动的时候和在postgresql.conf文件里设置。
放在共享内存里用于 WAL 日志的磁盘页面缓冲区的数目。这个选项只能在服务器启动的时候设置。
在自动的 WAL 检查点之间的最大举例,以日志文件段(每个段通常 16 兆打)计。 缺省是三。这个选项只能在服务器启动或者在 postgresql.conf 文件里设置。
在自动 WAL 检查点之间的最长时间,以秒计。缺省是 300 秒。 这个选项只能在服务器启动的时候或者在 postgresql.conf 文件里设置。
如果因为填充检查点段文件发生的检查点比这个数值表示的秒数更多, 那么向服务器日志发送一个消息。缺省是 30 秒。零则关闭警告。
向 WAL 缓冲区写入记录和将缓冲区刷新到磁盘上之间的时间延迟,以毫秒计。 一个非零的延迟允许多个事务共用一个 fsync() 系统调用提交, 如果系统负载足够搞,那么在给出的间隔里,其它的事务可能已经准备好提交了。 但是如果没有其它事务准备提交,那么这个间隔就是在浪费时间。 因此,这个延迟只是在一个服务器进程写其提交日志时,至少 commit_siblings 个其它事务在活跃的情况下执行。 缺省是零(无延迟)。
在执行 commit_delay 延迟的时候,要求的最少的打开的事务数目。 大一些的数值会导致在延迟期间另外一个事务准备好提交的可能性增大。缺省是五。
注意: 这些配置参数提供了一个用于影响查询优化器选择的查询规划的原始的方法。 如果优化器为特定的查询选择的缺省规划并不是最优,那么我们就可以通过使用这些配置参数强制优化器选择一个更好的规划来临时解决这个问题。 其它改善优化器选择的规划的方法包括配置 规划器开销常量, 更频繁运行 ANALYZE,以及使用 ALTER TABLE SET STATISTICS 为某个字段增加收集的统计信息。
打开或者关闭查询规划器对散列聚集规划类型的时候。缺省是打开。 这个用于调试查询规划器的。
打开或者关闭查询规划器对散列连接规划类型的使用。 缺省是打开。这个用于调试查询规划器。
打开或者关闭查询规划期对索引扫描规划类型的使用。 缺省是打开。这个用于调试查询规划器。
打开或者关闭查询规划器对融合连接规划类型的使用。 缺省是打开。这个用于调试查询规划器。
打开或者关闭查询规划器对嵌套循环连接规划类型的使用。 我们不可能完全消除嵌套循环连接,但是把这个变量关闭就会让规划器在存在其它方法的时候优先选择其他的。 缺省是打开。这个用于调试查询规划器。
打开或者关闭查询规划器对顺序扫描规划类型的使用。 我们不可能完全消除顺序扫描,但是把这个变量关闭会让规划器在存在其它方法的时候优先选择其它的。 缺省是打开。这个用于调试查询规划器。
打开或者关闭查询规划器使用明确的排序步骤。我们不可能完全消除明确的排序, 但是把这个变量关闭可以让规划器在存在其它方法的时候优先选择其它方法。 缺省是打开。这个用于调试查询规划器。
打开或者关闭查询规划器对 TID 扫描规划类型的使用。 缺省是打开。这个用于调试查询规划器。
注意: 糟糕的是,现在还没有定义得很合理的方法来判断下面出现的"开销"变量族的理想数值。 我们鼓励你做各种试验并分享你的发现。
设置规划器对有效磁盘缓冲区大小的假定(也就是说,内核的磁盘缓冲将会用于 PostgreSQL 数据文件的部分)。这个数值是以磁盘页面数计的,通常是每个页面 8192 字节。缺省是 1000。
设置规划器计算的一次非顺序磁盘页面抓取的开销。 这是以顺序磁盘页面抓取的开销的倍数计量的。 更高的数值令优化器更倾向于选择一次顺序扫描,低数值的时候则倾向于使用索引扫描。 缺省是四。
设置规划器预计在一次查询中处理一个数据行的开销。 这是以一次顺序页面抓取的开销的分数来计量的。 缺省是 0.01。
设置在一次索引扫描中规划器计算出来的处理每条索引行的开销。 这是以一次顺序页面抓取的开销的分数来计量的。缺省是 0.001。
设置规划器计算出来的处理一条WHERE子句中的每个操作符的开销。 这是以一次顺序页面抓取的开销的分数来计量的。缺省是 0.0025。
允许或禁止基因查询优化,这是一种试图不通过穷举搜索来实现查询规划的算法。缺省是允许。参阅各种其他geqo_设置。
只有当涉及的FROM关系数量至少有这么多个的时候,才使用基因查询优化。 (请注意一个外JOIN构造只算做一个FROM项。) 缺省是 11,对于数量小于此数的查询,也许使用判定性的穷举搜索更有效。 但是对于有许多表的查询,规划器做判断要花很多时间。
各种各样的调节基因查询优化的参数: 缓冲池大小(geqo_pool_size)是一个全体中的个体的数量。 有效值介于 128 和 1024 之间。如果把它设置为 0(缺省),那么就使用 2^(QS+1) 大小的缓冲池,这里 QS 是查询中FROM项的数量。 geqo_effort 的作用是为每一代计算一个缺省值。有效值是介于 1 和 80 之间的数字,40 是缺省值。 代(geqo_generations)声明算法中的反复次数。此数字必须是正整数。 如果声明了 0,那么就使用 Effort * Log2(PoolSize)。 算法的运行时间大概是缓冲池大小(geqo_pool_size)和代(geqo_generations)之和的分数。 选择偏移(geqo_selection_bias)是全体内部的选择性压力(selective pressure)。 其值可以介于 1.50 到 2.00 之间;后者是缺省。
为没有用 ALTER TABLE SET STATISTICS 设置字段相关目标的表中其它字段设置缺省统计目标。 更大的数值增加了 ANALYZE 所需要的时间,但是可能会改善规划器的估计质量。缺省值是 10。
如果生成的 FROM 列表不超过这个限制的项数,规划器将把子查询融合到上层查询。 小的数值降低规划的时间,但是可能会生成差些的查询计划。 缺省是 8。通常,把它限制在小于 geqo_threshold 的数值是比较明智的。
如果得出的列表不超过这个数目的项,那么规划器将把明确的内层 JOIN 构造抹平到 FROM 列表项中。 通常它设置为和 from_collapse_limit 相同。把它设置为 1 则避免任何内层 JOIN 的融合,就可以使用明确的 JOIN 语法来控制连接顺序。其它的中间值我们可以用来在规划时间和规划质量之间平衡。
PostgreSQL 允许把 syslog 作为日志系统。 如果这个选项设为 1,则信息同时往syslog和stdout输出。如果设为 2, 则只输出到syslog。(有些信息还是会输出到stdout/stderr。) 缺省是 0,意味着关闭向syslog的输出。 这个选项只能在服务器启动的时候设置。
这个选项在打开syslog后判断要使用的 syslog "设施"。 你可以从 LOCAL0,LOCAL1,LOCAL2,LOCAL3,LOCAL4, LOCAL5,LOCAL6,LOCAL7 中选择;缺省是LOCAL0。 又见你的系统的 syslog 文档。
如果打开了向syslog中记日志的功能, 这个选项决定用于在 syslog 日志信息中标识 PostgreSQL 的程序名。缺省是 postgres。
这个选项控制那些信息发送到客户端。 有效的数值是 DEBUG5,DEBUG4, DEBUG3,DEBUG2, DEBUG1,LOG,NOTICE, WARNING 和 ERROR。 每个级别包含所有它后面的级别,级别越靠后,发送的信息越少。 缺省是 NOTICE。这里的 LOG 和 log_min_messages 里面的有不同的级别。
控制写到服务器日志里的信息的详细程度。有效值是 DEBUG5, DEBUG4,DEBUG3,DEBUG2, DEBUG1,INFO,NOTICE, WARNING,ERROR,LOG, FATAL,和 PANIC。 每个级别都包含它后面的级别。越靠后的数值发往服务器日志的信息越少。 缺省是 NOTICE。请注意 LOG 和 client_min_messages 里面的同名级别优先级不同。 只有超级用户可以增大这个选项。
控制记录的每条信息写到服务器日志里的详细程度。 有效的值是 TERSE,DEFAULT,和 VERBOSE, 每个都会向显示的信息里增加更多的字段。
控制是否在服务器日志里输出那些导致错误条件的 SQL 语句。 所有导致一个特定级别(或者更高级别)的错误的 SQL 语句都要被记录日志。 缺省是 PANIC(实际上是把这个特性关闭了)。 有效的值有 DEBUG5, DEBUG4,DEBUG3, DEBUG2,DEBUG1, INFO,NOTICE, WARNING,ERROR, FATAL,和 PANIC。 比如,如果你把这个设置为 ERROR, 那么所有导致错误,致命错误,或者恐慌的 SQL 语句都将被记录日志。 打开这个选项可以帮助跟踪那些在服务器日志里出现的任何错误的源头。 只有超级用户可以增大这个选项。
设置要记录日志的语句的最小执行时间(以毫秒计)。 所有运行时间等于或者大于这个值的 SQL 语句都会在和他们的执行时间一起记录在日志里。 把这个设置为零将打印所有的查询和他们的持续时间。 设置为负一(缺省值)关闭这个功能。比如,如果你把它设置为 250, 那么所有运行时间等于或者超过 250ms 的 SQL 语句都会被记录日志。 打开这个选项可以很方便地跟踪你的应用里那些没有优化地查询。 只有超级用户可以增大这个值或者把它设置为负一。
安静的运行服务器。如果设置了这个选项,服务器将自动在后台运行并且与控制终端脱开。 因此,不会向标准输出或者标准错误写出任何信息(和 postmaster 的 -S 选项效果一样)。 除非打开了 syslog 日志,否则我们不建议使用这个选项,因为它让我们很难看到错误信息。
这里是这个设置里用到各种信息严重程度类型的一个列表:
这个提供开发人员使用的信息。
这个提供用户隐含要求的信息,比如在 VACUUM VERBOSE 过程中的信息。
这个提供可能对用户有帮助的信息,比如,长标识符的截断, 作为主键一部分创建的索引。
这个提供给用户的警告,比如在事务块范围之外的 COMMIT。
报告导致当前事务退出的错误。
这个报告一些管理员感兴趣的信息,比如,检查点活跃性。
这个报告为什么当前会话终止。
报告导致所有会话退出的原因。
这个选项打开发送到客户端或者服务器日志的各种调试输出。 对于执行的每个查询,它们打印生成的它生成的分析树,查询重写,或者执行规划。 debug_pretty_print 把这些输出进行缩进,会生成漂亮些但是长一些的输出格式。 client_min_messages 或者 log_min_messages 必须是 DEBUG1 或者更低才能把输出发往客户端或者服务器日志。这些选项缺省都是关闭的。
这样会在每次成功的联接的时候都向服务器日志里打印一行详细信息。 缺省时是关闭的,尽管它可能很有用。这个选项只能在服务器启动的时候设置, 或者在 postgresql.conf 配置文件里设置。
导致每个完成的语句的持续时间都写入日志。要使用这个选项, 打开 log_statement 和 log_pid, 这样你就可以用进程 ID 把语句和持续时间连接起来。 缺省是关闭。如果管理员打开过它,那么只有超级用户可以把这个选项关闭。
在服务器日志文件里的每条服务器信息前面加上服务器进程的进程号前缀。 这对理出某条信息属于那个连接很有帮助。缺省时是关闭的。 这个参数并不影响通过 syslog 记录日志的消息,它总包含进程 ID。
导致每个 SQL 语句都被记录日志。缺省是关闭的。 如果这个选项曾被管理员打开,那么只有超级用户可以关闭这个选项。
在每条服务器信息前面加上时间戳前缀。 缺省时是关闭的。
缺省时,联接日志只记录所联接主机的 IP 地址。如果你想显示主机名, 你可以打开这个选项,不过,这样有可能带来一些不可忽略的性能损失, --取决于你的名字解析的设置。 这个选项只能在服务器启动的时候设置。
在联接日志信息里面显示正在连接的主机的端口号。 你可以回朔此端口号并找出是哪个用户初始化的联接。 除了上面这个功能之外,它基本没用,所以缺省是关闭。 这个选项只能在服务器启动的时候设置。
对每条查询,向服务器日志里输出相应模块的性能统计。 这是原始的剖析工具。缺省时所有这些选项都是关闭的。 如果管理员曾经打开它们中的任意几个,那么只有超级用户才能关闭它。
控制服务器是否启动统计收集子进程。缺省时是打开, 但如果你对统计收集不感兴趣,那么可以关闭。这个选项只能在启动服务器时设置。
打开每个会话当前执行的命令的统计收集,以及该命令开始执行的时间。 这个选项缺省是关闭的。请注意即使把它打开,这个信息也不是所有用户都可见的, 只有超级用户和会话的所有者才能看到;因此它不应该是个安全漏洞。 这些数据可以通过系统视图 pg_stat_activity 访问,请参考 Chapter 23 获取更多信息。
这两个选项分别打开数据库活跃性的块级别和行级别的统计。 选项缺省是关闭的。这些数据可以通过 pg_stat 和 pg_statio 族系统视图来访问。 请参考 Chapter 23 获取更多信息。
如果打开,那么在服务器启动的时候收集的信息被清零。 如果关闭,那么统计在服务器重起过程中累加。缺省是打开。 这个选项只能在服务器启动的时候设置。
这个变量声明模式的搜索顺序,在一个被引用对象(表,数据类型,函数等)只是一个简单名字,没有附加模式部分时需要这样的搜索。 如果在另外一个模式里有一个相同的对象名,那么使用在这个搜索路径中找到的第一个。 一个没有在搜索路径中任何一个模式里出现的对象只能通过其所在模式的全称(打点的)名字来声明。
search_path 的值必需是一个逗号分隔的模式名的列表。 如果列表项之一是特殊值 $user,那么该模式和 SESSION_USER 所代换的名字一样 --- 如果存在这个模式的话。 (如果没有,那么忽略 $user。)
系统表模式,pg_catalog,总是被搜索,不管我们有没有在路径里提到它。 如果我们在路径中提到它,那么将按照指定的顺序搜索。 如果 pg_catalog 没有在路径中,那么它将在任何路径项之前得到搜索。 我们还要注意的是,临时表模式,pg_temp_nnn,也隐含在任何这些项之前得到搜索。
如果创建对象时没有声明特定的目标模式,那么它将被放到搜索路径中的第一个模式。如果搜索路径是空的,那么会报告一个错误。
这个参数的缺省值是 '$user, public' (如果没有叫 public 的模式,那么第二部分将被忽略)。 这样就支持共享使用一个数据库(这个时候没有用户拥有私有模式, 并且所有人都共享使用 public),私有的每用户的模式,以及这些的组合。其它效果可以通过(全局或者每用户地)修改搜索路径设置获取。
搜索路径当前的有效值可以用 SQL 函数 current_schemas() 检查。 它和检查 search_path 的值并不太一样, 因为 current_schemas() 显示的是在 search_path 里出现的请求如何被分析。
有关模式处理的更多信息,参阅 Section 5.8。
这个参数通常是真。如果设置为假,那么就关闭对 CREATE FUNCTION 里面的函数体字串的合法性检查。 关闭合法性检查有时候会有用,因为可以避免在从转储中恢复函数定义的时候类似前向引用的问题。
每个 SQL 事务都有一个隔离级别,可以是"读未提交", "读已提交","可重复读"或者是"可串性化"。 这个参数控制每个新的事务的隔离级别。缺省是读已提交。
参考 Chapter 12 和 SET TRANSACTION 获取更多信息。
只读的 SQL 事务不能修改非临时表。这个参数控制每个新事务的只读状态。 缺省是假(读/写).
参考 SET TRANSACTION 获取更多信息。
退出任何使用了超过此参数指定时间(毫秒)的语句。 零值关闭这个计时器,这也是缺省值。
设置日期和时间值的显示格式,以及有歧义的输入值的解析规则。 由于历史原因,这个变量包含两个独立的部分:输出格式声明(ISO, Postgres,SQL,或者 German)以及日志字段顺序声明(DMY, MDY,或者 YMD)。 着两个可以独立设置或者一起设置。关键字 Euro 和 European 是 DMY 的同义词; 关键字 US,NonEuro,和 NonEuropean 是 MDY 的同义词。 参阅 Section 8.5 获取更多信息。缺省是 ISO, US。
设置用于显示和解析时间戳的时区。缺省是使用系统环境声明的时区。 参阅 Section 8.5 获取更多信息。
如果设置为真,那么ACST,CST,CST, EST,和 SAT 都解释成澳大利亚时区,而不是南/北美时区和周六。 缺省是假。
这个参数为浮点数值调整显示的数据位数,浮点类型包括 float4, float8,和几何数据类型。参数值加在标准的数据位数上(FLT_DIG 或者 DBL_DIG 中合适的)。 数值可以设置为最高 2,以包括部分关键的数据位;这个功能对转储那些需要精确恢复的浮点数据特别有用。 或者你也可以把它设置位负数以消除不需要的数据位。
设置客户端编码(字符集)。缺省使用数据库编码。
设置信息显示的语言。可接受的值是系统相关的;参阅 Section 20.1 获取更多信息。 如果这个变量设置为空字串(缺省值),那么其值以一种系统相关的方式从服务器的执行环境中继承过来。
在一些系统上,这个区域范畴并不存在。设置这个变量仍然是允许的, 但是将不会有任何效果。同样,也有可能是所期望的语言的翻译信息不存在。在这种情况下,你仍然能看到英文信息。
为格式化金额数量设置区域。比如为 to_char 族函数设置。 可接受的值是系统相关的;参阅 Section 20.1 获取更多信息。 如果这个变量设置为空字串(缺省值),那么其值是以一种系统相关的方式从服务器的执行环境中继承过来的。
设置用于格式化数字的区域,比如那些用于 to_char() 族函数的。可接受的值是系统相关的;参阅 Section 20.1 获取更多信息。如果这个变量设置为空字串(缺省值),那么其值以一种系统相关的方法从服务器的执行环境中继承过来。
设置用于格式化日期和时间值的区域。(目前,这个设置什么事也没干,但将来可能会有用。) to_char() 族函数的。 可接受的值是系统相关的;参阅 Section 20.1 获取更多信息。 如果这个变量设置为空字串(缺省值),那么其值是以一种系统相关的方式从服务器的执行环境中继承过来的。
决定 EXPLAIN VERBOSE 是使用缩进格式还是使用非缩进格式显示详细的查询树转储。 缺省是打开。
如果需要打开一个可以动态装载的模块并且声明的名字没有目录部分(也就是说名字里不包含斜杠), 那么系统将搜索这个目录以查找声明的文件。 (所使用的名字就是在 CREATE FUNCTION 或者 LOAD 命令中声明的名字。)
用于 dynamic_library_path 的数值必须是一个冒号分隔的绝对路径名字列表。 如果一个路径名字以特殊变量 '$libdir'(PostgreSQL编译好的库目录)开头, 那么就替换为PostgreSQL发布提供的模块安装路径。 (使用 pg_config --pkglibdir 打印这个目录的名字。) 比如:
dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir'
这个参数的缺省值是 '$libdir'。 如果把这个值设置为一个空字串,则关闭自动路径搜索。
这个参数可以在运行时由超级用户修改,但是这么修改的设置只能保持到这个客户端连接的结束, 因此这个方法应该保留给开发用途使用。我们建议的设置这个参数的方法是在 postgresql.conf 配置文件里设置。 file.
设置分析器接受的最大表达式嵌套深度。 缺省值对任何常见查询来说都够高了,但是如果你需要的话你可以提高这个数值。 (不过如果你把它升得太高,你就得冒因为栈溢出导致的服务器崩溃的风险。)
这个是以毫秒计的时间,用于设置在检查是否存在死锁条件之前的等待时间。 检查是否存在死锁条件是一个缓慢的过程,因此服务器不会在每次等待锁的时候都运行这个过程。 我们(乐观地?)假设在生产应用中的死锁是不常出现的,因此我们在开始询问是否可以解锁之前只等待一个锁相对短的一段时间。 增加这个值就减少了浪费在无用的死锁检查上的时间,但是减慢了报告真正死锁错误的速度。 缺省是 1000(也就是 1 秒),可能是你能够耐心等待的最短时间。 在一个重载的服务器上,你可能需要增大它。这个值的典型设置应该超过你的事务的时间,这样就可以减少在锁释放之前就开始死锁检查的问题。
共享的锁表的大小是以假设任意时刻最多只有 max_locks_per_transaction * max_connections 个独立的对象需要被锁住为基础进行计算的。缺省值 64,已经经历史证明是足够的了,不过如果你的客户可能在一个事务里面修改很多不同的表, 那么你就可能需要提高这个数值。这个选项只能在服务器启动的时候设置。
如果为 true,查询引用的表将自动增加到 FROM 里 -如果还没有出现这个子句的话。 缺省是 true,为的是和以前的 PostgreSQL 版本兼容。 不过,这个行为不是 SQL 的标准,并且很多人不喜欢她,因为它会隐藏错误。 设置为 false 则遵循 SQL 标准行为:拒绝引用不在 FROM 里列出的表。
正则表达式"风味"可以设置为 advanced,extended, 或者 basic。通常的缺省是 advanced。extended 设置对于和 7.4 以前的 PostgreSQL 精确的向下兼容很有用。
这个选项控制继承语义,尤其是在缺省时是否在各种命令里把子表包括进来。 版本 7.1 以前是不包括的。如果你需要老特性,你可以把这个变量设为假, 但是从长远看来,我们建议你修改你的应用以使用 ONLY 关键字来排除子表。参考 Section 5.5 获取关于继承的更多信息。
如果打开它,那么下面这样的表达式 expr = NULL (或者 NULL = expr)被当做 expr IS NULL,处理,也就是说, 如果 expr 得出 NULL 值则返回真,否则返回假。 expr = NULL 的正确的行为总是返回 NULL(未知)。因此这个选项缺省时是关闭的。
不过,在Microsoft Access里的过滤表单生成的查询好像使用的是 expr = NULL 测试空值, 因此,如果你使用这个界面访问数据库,你可能想把这个选项打开。 因为形如 expr = NULL 的表达式总是返回 NULL (使用正确的代换),因此它们并不常用, 而且在一般的应用中也不常见,因此这个选项实际上没有什么害处。 但是新用户常常在涉及 NULL 的表达式语义上感到胡涂,因此缺省时不打开这个选项。
请注意这个选项只影响文本的 = 操作符, 不包括其它比较操作符或者其它与一些涉及等号操作符的表达式计算(比如 IN)。因此,这个选项不是垃圾程序的狗皮膏药。
请参考 Section 9.2 获取相关信息。
下面的选项目的是在 PostgreSQL 代码上使用, 并且在某些情况下可以帮助恢复严重损坏了的数据库。 在生产环境里没有使用这些设置的理由。 因此,我们把他们从样例 postgresql.conf 文件中排除了出去。 请注意许多这些选项要求特殊的源代码编译标志才能运转。
打开各种断言检查。这是调试助手。如果你经历了奇怪的问题或者崩溃, 那么你可能会想把这个打开,因为它可能暴露编程的错误。 要使用这个选项,我们必须在制作 PostgreSQL 的时候定义宏 USE_ASSERT_CHECKING(通过 configure 选项 --enable-cassert 完成)。 请注意,如果带着断言打开的选项编译 PostgreSQL,那么 DEBUG_ASSERTIONS 缺省就是打开的。
如果为非零,那么在一个新的服务器进程派生出来之后,就会延迟这么多秒,然后才会继续认证过程。 这样就给我们一个机会用调试器附着在一个服务器进程上跟踪认证里面的异常行为。
为 LISTEN 和 NOTIFY 命令生长大量调试输出。 client_min_messages 或者 log_min_messages 必须是 DEBUG1 或者更低才能把这些输出分别发送到客户端或者服务器日志。
各种其它的代码跟踪和调试选项。
如果为非零,打开 WAL 相关的调试输出。
如果侦测到一个损坏了的页面头通常会导致 PostgreSQL 报告一个错误,并且退出当前事务。把 zero_damaged_pages 设置为真则令系统报告一个警告,把损坏的页面填充零,然后继续处理。 这种行为会破坏数据,也就是所有在已经损坏页面上的行。 但是它允许你绕开坏页面然后从表中还有的未损坏的页面上继续检索数据行。 因此它在因为硬件或者软件错误导致的崩溃中进行恢复是很有用的。 通常你不应该把它设置为真,除非你已经彻底放弃从崩溃底页面中恢复数据。缺省的设置是关闭,并且只有超级用户可以改变它。
为了方便起见,这里还为一些参数提供了好多单字母命令行选项开关。 它们在下Table 16-1里描述。
Table 16-1. 短选项键字
短选项 | 等效 |
---|---|
-B x | shared_buffers = x |
-d x | server_min_messages = DEBUGx |
-F | fsync = off |
-h x | virtual_host = x |
-i | tcpip_socket = on |
-k x | unix_socket_directory = x |
-l | ssl = on |
-N x | max_connections = x |
-p x | port = x |
-fi, -fh, -fm, -fn, -fs, -ft[a] | enable_indexscan=off, enable_hashjoin=off, enable_mergejoin=off, enable_nestloop=off, enable_seqscan=off, enable_tidscan=off |
-s[a] | show_statement_stats = on |
-S x[a] | sort_mem = x |
-tpa,-tpl,-te[a] | log_parser_stats=on,log_planner_stats=on,log_executor_stats=on |
Notes: a. 因为历史原因,这些选项通过-o postmaster选项传递给独立得服务器进程,比如, $ postmaster -o '-S 1024 -s'
或者是通过客户端的 PGOPTIONS,
像上面解释地那样。
|