3.4. 运行时配置

有一堆配置参数可以影响数据库系统的行为. 我们在这里描述一下如何设置它们,然后在下一章我们将逐个 讨论它们.

所有参数名都是大小写不敏感的.每个参数都可以接受四种类型之一∶布尔, 整数, 浮点数,字符串.布尔值可以是 ONOFFTRUEFALSEYESNO10 (大小写无关)或这些东西的任意清晰无 歧义的前缀.

设置这些选项的一个方法是在数据目录里比如 (在那里安装着一个缺省文件) 创建一个文件 postgresql.conf 比如,下面是一个该文件的例子:

# This is a comment
log_connections = yes
syslog = 2

象你看到的那样,选项是每条一行.选项名和值之间的等号是可选的. 空白和空行被忽略.井号("#")用做任何地方 引入注释.

每次 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 ENABLE_SEQSCAN TO OFF;

请参考 SQL 命令语言手册获取命令语法的详细信息. 另外,我们可以将一个选项集赋予一个用户或者数据库.在一个会话开始的 时候,为该用户和涉及的数据库装载缺省设置.命令 ALTER DATABASEALTER USER 分别用于配置这些东西.

3.4.1. pg_settings

虚表 pg_settings 允许显示和更新当前会话的运行时参数。 SHOW ALL 提供的每个可用参数都有一条记录。但是它们出现的 形式是允许它们与其它关系连接并且施加一个选择标准。

一个在 pg_settings 上执行的 UPDATE 等效于在那个命名参数上执行 SET 命令。 这样的修改只影响当前会话使用的数值。如果在一个事务里发出了一个 UPDATE 然后该事务后面退出了,那么 UPDATE 命令的效果在事务 回滚的时候消失。一旦周围的事务提交,那么其效果讲持续到会话结束, 除非被其它 UPDATE 或者 SET 覆盖。

Table 3-1. pg_settings 字段

名字类型描述
nametext当前会话运行时参数的名字
settingtext当前会话运行时参数的值

3.4.2. 规划器和优化器调节

CPU_INDEX_TUPLE_COST(浮点数)

设置在一次索引扫描中优化器计算出来的处理每条索引元组的开销. 这是以一次顺序页面抓取的开销的分数来计量的.

CPU_OPERATOR_COST (浮点数)

设置优化器计算出来的处理一条WHERE子句中的每个操作符的开销. 这是以一次顺序页面抓取的开销的分数来计量的.

CPU_TUPLE_COST(浮点数)

设置优化器预计在一次查询中处理每条元组的开销. 这是以一次顺序页面抓取的开销的分数来计量的.

DEFAULT_STATISTICS_TARGET (integer)

为没有通过 ALTER TABLE SET STATISTICS 设置一个字段相关 的目标的表字段设置缺省统计目标。更大的数值增加了 ANALYZE 所需要的时间,但是可能会改善规划器的估计质量。缺省值是 10。

EFFECTIVE_CACHE_SIZE(浮点数)

设置优化器假设的磁盘缓冲的有效尺寸(内核的磁盘缓冲中将被 PostgreSQL数据文件使用的比例). 这是以磁盘页面计量的,通常是 8 kB/页.

ENABLE_HASHAGG (boolean)

打开或关闭查询规划器是否使用散列的聚集规划类型。缺省是打开。 这个东西可以用于调试查询规划器。

ENABLE_HASHJOIN(布尔数)

允许或禁止查询规划器使用散列连接( hash-join )规划类型. 缺省是允许.这个选项主要用于调试查询规划器.

ENABLE_INDEXSCAN (布尔数)

允许或禁止查询规划器使用索引扫描规划类型. 缺省是允许.这个选项主要用于调试查询规划器.

ENABLE_MERGEJOIN (布尔数)

允许或禁止查询规划器使用融合连接规划类型. 缺省是允许.这个选项主要用于调试查询规划器.

ENABLE_NESTLOOP (布尔数)

允许或禁止查询规划器使用嵌套循环连接规划. 实际上不可能完全禁止使用嵌套循环连接,不过把这个选项设置为 禁止会令优化器在存在其它方法的情况下优先选用其它方法. 缺省是允许.这个选项对调试查询规划器很有用.

ENABLE_SEQSCAN(布尔数)

允许或禁止查询规划器使用顺序扫描规划类型. 实际上不可能完全禁止规划器使用顺序扫描,不过把这个选项设置为 禁止会令优化器在存在其它方法的情况下优先选用其它方法. 缺省是允许.这个选项主要用于调试查询规划器.

ENABLE_SORT(布尔数)

允许或禁止查询规划器使用明确的排序步骤. 实际上不可能完全禁止规划器使用排序,不过把这个选项设置为 禁止会令优化器在存在其它方法的情况下优先选用其它方法. 缺省是允许.这个选项主要用于调试查询规划器.

ENABLE_TIDSCAN(布尔)

允许或禁止查询规划器使用TID扫描规划类型. 缺省是允许.这个选项主要用于调试查询规划器.

GEQO布尔

允许或禁止基因查询优化,这是一种试图不通过穷举搜索来实现 查询规划的算法.缺省是允许.参阅各种其他GEQO_设置.

GEQO_EFFORT整数
GEQO_GENERATIONS整数
GEQO_POOL_SIZE整数
GEQO_RANDOM_SEED整数
GEQO_SELECTION_BIAS浮点数

各种各样的调节基因查询优化的参数: 缓冲池大小(pool size)是一个全体中的个体的数量.有效值介于 128 和 1024 之间.如果把它设置为 0(缺省),那么就使用 2^(QS+1) 大小的缓冲池,这里 QS 是查询中关系的数量.影响(effort)用于为每一代 计算一个缺省值.有效值是介于 1 和 80 之间的数字,40 是缺省值. 代(Generations)声明算法中的反复次数.此数字必须是正整数. 如果声明了 0,那么就使用 Effort * Log2(PoolSize).此算法的运行 时间大概是缓冲池大小(pool size)和代(Generations)之和的分数. 选择偏移(selection bias)是全体内部的选择性压力 (selective pressure). 其值可以介于 1.50 到 2.00 之间;后者是缺省. 随机种子可以设置为让这个算法表现为能够产生可复现的值.如果把 它设置为 -1 那么此算法的行为将不可判定.

GEQO_THRESHOLD整数

只有当涉及的FROM关系数量至少有 GEQO_THRESHOLD 个时, 才使用基因查询优化. (请注意一个JOIN构造只算做一个FROM项.) 缺省是 11,对于数量小于此数的查询,也许使用判定性的穷举搜索更有效. 这个参数也控制优化器在把子查询的 FROM 子句融合到 上层查询的时候到底使多大的劲.

RANDOM_PAGE_COST浮点数

设置优化器计算的一次非顺序磁盘页面抓取的开销. 这是以顺序磁盘页面抓取的开销的倍数计量的. 更高的数值令优化器更倾向于选择一次顺序扫描,低数值的时候 则倾向于使用索引扫描。

注意: 糟糕的是,我们没有很好的定义我们上面刚刚描述完的 "COST(开销)" 家族的典型值的方法.我们鼓励你自己试验并且与我们共享你的发现.

3.4.3. 日志和调试

CLIENT_MIN_MESSAGES (string)

这个选项控制写入服务器日志的详细程度. 有效的数值是 DEBUG5DEBUG4DEBUG3DEBUG2DEBUG1INFONOTICEDEBUG1, INFO, NOTICE, WARNING, ERRORLOGFATAL,和 PANIC.越靠后的数值发送到日志的细节越少. 缺省是 NOTICE. 这里的 LOGLOG_MIN_MESSAGES 里面的有不同的优先级.

这里是各种信息类型的一个摘要:

DEBUG[1-5]

这个提供开发人员使用的信息。

INFO

这个提供用户隐含要求的信息,比如在 VACUUM VERBOSE 过程中的信息。

NOTICE

这个提供可能对用户有帮助的信息,比如,长标识符的截断, 作为主键一部分创建的索引。

WARNING

这个提供给用户的警告,比如在事务范围之外的 COMMIT

ERROR

报告导致事务退出的错误。

LOG

这个报告一些管理员感兴趣的信息,比如,检查点活跃性。

FATAL

这个报告为什么后端会话终止。

PANIC

这个报告为什么所有后端重启。

DEBUG_ASSERTIONS布尔

打开各种断言检查.这是调试助手.如果你经历了奇怪的毛病或者 崩溃,可能你希望把这个选项打开,因为它可能会暴露程序的错误. 要使用这个选项,制作PostgreSQL的时候必须定义 USE_ASSERT_CHECKING宏. (是通过 configure 选项 --enable-cassert实现的). 请注意如果PostgreSQL是打开断言制作的话,那么 DEBUG_ASSERTIONS 缺省是打开的.

DEBUG_PRINT_PARSE布尔
DEBUG_PRINT_REWRITTEN布尔
DEBUG_PRINT_PLAN布尔
DEBUG_PRETTY_PRINT布尔

对于任何执行的查询,把该查询,它生成的分析树,它生成的执行规划,或者其 查询重写输出打印到服务器日志中. 选择 DEBUG_PRETTY_PRINT 会生成漂亮些但是长一些的输出格式.

EXPLAIN_PRETTY_PRINT (boolean)

判断 EXPLAIN VERBOSE 是使用缩进格式还是使用非缩进 格式用于显示详细的查询树转储.

LOG_HOSTNAME布尔

缺省时,联接日志只记录所联接主机的 IP 地址.如果你想显示主机名, 你可以打开这个选项,不过,这样有可能带来一些不可忽略的性能损失, --取决于你的名字解析的设置. 这个选项只能在服务器启动的时候设置.

LOG_CONNECTIONS布尔

这样会在每次成功的联接的时候都向服务器日志里打印一行信息. 缺省时是关闭的,尽管它可能很有用.这个选项只能在服务器启动的时候设置, 或者在 postgresql.conf 配置文件里设置.

LOG_DURATION (boolean)

导致每个完成的语句的持续时间都写入日志。要使用这个选项, 打开 LOG_STATEMENTLOG_PID, 这样你就可以用进程 ID 把语句和持续时间连接起来。

LOG_MIN_ERROR_STATEMENT (string)

控制是否在服务器日志里输出那些导致错误条件的 SQL 语句。 所有导致一个特定级别(或者更高级别)的错误的 SQL 语句都要 被记录日志。 缺省是 PANIC (实际上是把这个特性关闭了)。有效的值有 DEBUG5DEBUG4DEBUG3DEBUG2DEBUG1INFONOTICEWARNINGERRORFATAL,和 PANIC。 比如,如果你把这个设置为 ERROR, 那么所有导致错误,致命错误,或者恐慌的 SQL 语句都将被记录日志。 打开这个选项可以帮助跟踪那些在服务器日志里出现的任何错误的源头。

我们建议你也吧 LOG_PID 打开,这样你就可以更 容易讲错误语句和错误信息对应起来。

LOG_MIN_MESSAGES (string)

控制写到服务器日志里的信息的详细程度。有效值是 DEBUG5DEBUG4DEBUG3DEBUG2DEBUG1INFONOTICEWARNINGERRORLOGFATAL,和 PANIC。越靠后的数值发往服务器日志 的信息越简单。缺省是 NOTICE。请注意 LOGCLIENT_MIN_MESSAGES 里面的同名级别优先级不同。 又见该节获取这些值的解释。

LOG_PID布尔

在每条服务器信息前面加上后端服务进程的进程号前缀. 这对理出某条信息属于那个联接很有帮助. 缺省时是关闭的. 这个参数并不影响通过 syslog 记录日志的消息, 它总包含进程 ID。

LOG_STATEMENT (boolean)

记录每个到来的 SQL 查询。

LOG_DURATION (boolean)

打印每个完成的查询的持续时间。要使用这个选项,打开 LOG_STATEMENTLOG_PID,这样你可以用进程号链接初的查询和它的持续时间。

LOG_TIMESTAMP布尔

在每条服务器信息前面加上时间戳前缀. 缺省时是关闭的.

LOG_STATEMENT_STATS布尔
LOG_PARSER_STATS布尔
LOG_PLANNER_STATS布尔
LOG_EXECUTOR_STATS布尔

对每条查询,向服务器日志里输出相应模块的性能统计. 这是原始的调节工具.

LOG_SOURCE_PORT布尔

在联接日志信息里面显示正在连接的主机的端口号. 你可以回朔此端口号并找出是哪个用户初始化的联接. 因为这个功能基本没用,所以缺省是关闭. 这个选项只能在服务器启动的时候设置.

STATS_COMMAND_STRING (boolean)
STATS_BLOCK_LEVEL (boolean)
STATS_ROW_LEVEL (boolean)

决定后端发送给统计收集进程的信息∶当前命令,块层次的活跃性 统计或者行层次的活跃性统计.所有的缺省都是关闭(off).打开统计收集 会导致每个查询多付出一点点时间开销,但是对于调试和性能优化确是无价的.

STATS_RESET_ON_SERVER_START (boolean)

如果打开,那么在服务器启动的时候收集的信息被清零. 如果关闭,那么统计在服务器重起过程中累加.缺省是打开. 这个选项只能在服务器启动的时候设置.

STATS_START_COLLECTOR (boolean)

控制服务器是否启动统计收集子进程.缺省时是打开, 但如果你对统计收集不感兴趣,那么可以关闭.这个选项只能在启动服务器时 设置.

SYSLOG整数

PostgreSQL 允许把 syslog 作为日志系统.如果这个选项 设为 1,则信息同时往syslogstdout输出.如果设为 2, 则只输出到syslog? (有些信息还是会输出到stdout/stderr.) 缺省是 0,意味着关闭向syslog的输出. 这个选项只能在服务器启动的时候设置.

SYSLOG_FACILITY(字串)

这个选项在打开syslog后判断要使用的 syslog "设施".你可以从 from LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7; 中选择;缺省是LOCAL0.参阅你的系统的 syslog

SYSLOG_IDENT(字串)

如果打开了向syslog中记日志的功能, 这个选项决定用于在 syslog 日志信息中标识 PostgreSQL 的程序名.缺省是 postgres

TRACE_NOTIFY布尔

LISTENNOTIFY 命令生成一大堆调试输出.

3.4.4. 一般操作

AUTOCOMMIT (bool)

如果设置为真,那么 PostgreSQL 会在每个 没有明确在一个事务块里面(也就是说,除非给出了一个没有对应的 COMMITBEGIN)的成功的命令后面自动做一 个 COMMIT。 如果设置为假,PostgreSQL 将只有在明确 收到一个 COMMIT 命令的时候才会提交变化。这个模式也可以 当作是在收到一个命令地时候明确地发出 BEGIN,而 PostgreSQL 这个时候并未已经在一个 事务块里面。缺省是真,这是为了兼容历史地 PostgreSQL 行为。 但是,如果要最大限度地与 SQL 规范兼容,那么把它设为假。

注意: 即使 autocommit 设置为假,SETSHOW,和 RESET 也不会开始一个新的 事务块。他们在自己的事务里运行。一旦发出了另外一条命令, 就开始一个事务块,并且任何 SETSHOW, 或者 RESET 命令都被认为是该事务的一部分,也就是说, 他们会根据事务的状态而提交或者回滚。要在事务块的开始执行一个 SETSHOW,或者 RESET 命令,先使用 BEGIN

注意: PostgreSQL 7.3,设置 autocommit 为假支持得不是很好。这是一个新特性,还没有为所有客户端库和应用所习惯。 在把它作为你的安装的缺省设置之前,请认真测试。

AUSTRALIAN_TIMEZONES (bool)

如果设置为真,那么 CSTEST,和 SAT 都解释成 Australian 时区,而不是北美中/东部时区和周六.缺省是假.

AUTHENTICATION_TIMEOUT (integer)

完成客户端认证的最长时间,以秒记.如果一个准客户未能在这个时间长度内 完成认证协议,那么服务器将自行中断联接.这样就避免了挂起的客户端 无限制地占据联接.这个选项只能在服务器启动的时候在 postgresql.conf 文件里设置.

CLIENT_ENCODING (string)

设置客户端编码(字符集)。缺省使用数据库编码。

DB_USER_NAMESPACE (boolean)

这样就允许每数据库地用户名。缺省是关闭。

如果打开它,那么 你可以象 username@dbname 这样创建用户。如果客户端传递 username 过来,那么@ 和数据库名被附加到用户名后面,然后服务器使用这个数据库相关的用户名进行查找。 如果创建一个包含 @ 的用户名,那么你需要把用户名引起来。

打开这个选项之后,你还是可以创建普通的全局用户。只要在客户端声明 用户名的时候简单附加 @@ 会被删除, 然后服务器才进行查询。

注意: 这个特性是一个临时的试验特性,直到找出一个完整的解决方案。 到那个时候,这个选项可能会被删除。

DEADLOCK_TIMEOUT整数

这个是以毫秒计的时间,用于设置在检查是否存在死锁条件之前的等待 时间. 检查是否存在死锁条件是一个缓慢的过程,因此服务器不会在每次 等待锁的时候都运行这个过程.我们(乐观地?)假设在生产应用中的死锁 是不常出现的,因此我们在开始询问是否可以解锁之前只等待一个锁 相对短的一段时间. 增加这个值就减少了浪费在无用的死锁检查上的时间,但是减慢了报告 真正死锁错误的速度. 缺省是 1000(也就是 1 秒),可能是你能够耐心等待的最短时间. 在一个重载的服务器上,你可能需要增大它.这个值的典型设置应该 超过你的事务的时间,这样就可以减少在锁释放之前就开始死锁检查的 问题. 这个选项只能在服务器启动的时候设置.

DEFAUL_TRANSACTION_ISOLATION (字串)

每个 SQL 事务都有一个隔离级别,可以是"读已提交" 或者是"可串性化".这个参数控制每个新的事务的 隔离级别.缺省是读已提交.

参考 PostgreSQL 7.3.3 用户手册 和命令 SET TRANSACTION 获取更多信息.

DYNAMIC_LIBRARY_PATH (string)

如果需要打开一个可以动态装载的模块并且声明的名字没有目录 部分(也就是说名字里不包含斜扛),那么系统将搜索这个目录以 查找声明的文件.(所使用的名字就是在 CREATE FUNCTION 或者LOAD 命令中声明的名字.)

用于 dynamic_library_path 的数值必须是一个冒号分隔的 绝对路径名字列表.如果一个路径名字以特殊变量 '$libdir'PostgreSQL编译好的库目录,开头, 那么就替换为PostgreSQL发布提供的模块安装路径. 比如∶

dynamic_library_path = '/usr/local/lib:/home/my_project/lib:$libdir:$libdir/contrib'

用于这个参数的缺省数值是 $libdir. 如果该数值设置为空字串,那么就会关闭自动路径查找.

这个参数可以在运行时由超级用户修改,但是这样设置的 参数只持续到该客户联接的终止,因此这个方法应该保留给开发用途. 我们推荐在 postgresql.conf 配置文件里设置这个 参数.

FSYNC布尔

如果这个选项打开,PostgreSQL后端就会在若干个 位置调用fsync()系统调用以保证更新物理地写入磁盘. 这样就保证了一个数据库安装可以在操作系统或者硬件崩溃之后 恢复到一个稳定的状态. 这样做极大地增加了一个数据库安装在经历了大规模的操作系统或硬件 崩溃后仍然可用的机会.(数据库服务器的崩溃不会 出现这个问题).

不过,这个操作大大地降低了 PostgreSQL 的速度,因为事务提交的时候,它都必须 停下来等待操作系统输出它的预写日志. 没有 fsync的时候,操作系统就可以尽可能地处理好 缓冲,排序,和后写,因此可以有非常显著的性能提升. 不过,如果系统崩溃,最后几次提交的事务的部分或全部数据可能会丢失. 最糟糕的情况是可能发生不可恢复的数据崩溃.

因为上面的原因,有些管理员总是把它关闭, 有些只是在大量数据装载的时候才 关闭它,这样如果出错了的话就有一个显而易见的重新开始的起点. 有些人把它打开只是为了保证安全.因为这样做更安全,所以 缺省是打开的.如果你信任你的操作系统,你的 硬件和你的工具公司(或者是你的 UPS),你可能愿意关闭它.

我们需要指出的是做fsync的性能下降在 PostgreSQL 版本 7.1 及之后的版本里面比以前版本显著减少了.如果以前你因为性能原因 禁止了fsync,那么现在你可能会重新考虑一下.

这个选项只能在服务器启动的时候设置,或者设置在 postgresql.conf 文件里.

EXTRA_FLOAT_DIGITS (integer)

这个参数调整为浮点数值显示的位数,浮点数包括 float4float8,和几何数据类型。参数值加到标准位数上面(FLT_DIG 或者 DBL_DIG中适用的那个)。这个数值可以设置最高为 2, 以包含部分有用的数据位;它可以用于转储那些需要准确恢复的浮点数据。 或者可以设置成负数以消除不需要的小数位。

KRB_SERVER_KEYFILE(字串)

设置 Kerberos 服务器密钥文件的位置.参阅 Section 4.2.3 获取细节.

LC_MESSAGES (string)

设置信息显示的语言.可接受的值是系统相关的;参阅 Section 5.1 获取更多信息.如果这个变量设置为空字串 (缺省值),那么其值以一种系统相关的方式从服务器的执行环境中继承过来.

在一些系统上,这个区域范畴并不存在.设置这个变量仍然是允许的, 但是将不会有任何效果.同样,也有可能是所期望的语言的翻译信息不 存在.在这种情况下,你仍然能看到英文信息.

LC_MONETARY (string)

为格式化金额数量设置区域.比如为 to_char() 族函数设置。 可接受的值是系统相关的; 参阅 Section 5.1 获取更多信息.如果这个 变量设置为空字串(缺省值),那么其值是以一种系统相关的方式 从服务器的执行环境中继承过来的.

LC_NUMERIC (string)

设置用于格式化数字的区域,比如那些用于 to_char() 族函数的.可接受的值是系统相关的;参阅 Section 5.1 获取更多信息.如果这个变量设置为空字串(缺省值),那么其值以一种 系统相关的方法从服务器的执行环境中继承过来.

LC_TIME (string)

设置用于格式化日期和时间值的区域,(目前,这个设置什么事也没干, 但将来可能会有用。)。 to_char() 族函数的.可接受的值是系统相关的; 参阅 Section 5.1 获取更多信息.如果这个变量设置为空字串 (缺省值),那么其值是以一种系统相关的方式从服务器的执行环境中继承过来的.

MAX_CONNECTIONS整数

决定允许多少个并发联接.缺省是 32 (除非在制作服务器的时候修改). 这个选项只能在服务器启动的时候设置.

MAX_EXPR_DEPTH整数

设置分析器接受的最大表达式嵌套深度.缺省值对任何常见查询来说 都够高了,但是如果你需要的话你可以提高这个数值. (不过如果你把它升得太高,你就得冒因为栈溢出导致的后端崩溃 的风险.)

MAX_FILES_PER_PROCESS (integer)

设置每个服务器子进程中同时打开的文件数目的最大值. 缺省是 1000.代码实际使用的限制要比这个设置以及 sysconf(_SC_OPEN_MAX) 的结果小. 因此,在那些返回合理限制的系统上,你用不着担心这个设置. 但是在一些平台上(特别是大多数 BSD 系统), sysconf返回的值要远比大量进程同时试图打开该数量的文件时 系统所能支持的大.如果你发现自己看到 "打开太多文件(Too many open files)"错误, 那么试着降低这个设置看看.这个选项只能在服务器启动时设置, 或者在 postgresql.conf 配置文件中设置; 如果在配置文件中修改了它,那么它只影响随后启动的服务器子进程.

MAX_FSM_PAGES (integer)

设置那些自由空间是通过放在共享的自由空间映射表中进行跟踪的 最大磁盘页面数目.缺省是 10000.这个选项只能在服务器启动的时候设置.

MAX_FSM_RELATIONS (integer)

设置那些自由空间是通过放在共享的自由空间映射表中进行跟踪的关系(表)的 最大数目. 缺省是 1000.这个选项只能在服务器启动的时候设置.

MAX_LOCKS_PER_TRANSACTION (integer)

共享表的大小是以假设任意时刻最多只有 max_locks_per_transaction * max_connections 个独立的对象需要被锁住为基础进行计算的.缺省值 64,已经经历史证明 是足够的了,不过如果你的客户可能在一个事务里面修改很多不同的表, 那么你就可能需要提高这个数值.这个选项只能在服务器启动的时候设置.

PASSWORD_ENCRYPTION (boolean)

CREATE USER 或者 ALTER USER 里面声明了口令, 但是既没有写 ENCRYPTED 也没有写UNENCRYPTED, 那么这个标志决定口令是否加密。缺省是打开(加密口令)。

PORT整数

服务器侦听的 TCP 端口;缺省 5432.这个选项只能在服务器启动的时候设置.

SEARCH_PATH (string)

这个变量声明模式的搜索顺序,在一个被引用对象(表,数据类型,函数等) 只是一个简单名字,没有附加模式部分时需要这样的搜索. 如果在另外一个模式里有一个相同的对象名,那么使用在这个搜索路径中 找到的第一个.一个没有在搜索路径中任何一个模式里出现的对象 只能通过其所在模式的全称(打点的)名字来声明.

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 里出现的请求如何被分析.

有关模式处理的更多信息,参阅 PostgreSQL 7.3.3 用户手册

STATEMENT_TIMEOUT (integer)

退出任何执行的时间超过指定毫秒数的语句。零值关闭这个计时器。

SHARED_BUFFERS整数

设置数据库服务器将使用的共享内存缓冲区数量.缺省是 64. 每个缓冲区大小的典型值是 8192 字节.这个数值必须大于 16, 并且至少是 MAX_CONNECTIONS 的两倍, 不过,在现代的计算机上,更高的数值通常可以改进性能。 对于生产用机,我们推荐把这个数值设置为几千。 这个选项只能在服务器启动的时候设置.

Increasing this parameter may cause PostgreSQL to request more System V shared memory than your operating system's default configuration allows. See Section 3.5.1 for information on how to adjust these parameters, if necessary. 增加这个参数可能导致 PostgreSQL 要求更多的 System V 共享内存,甚至大于你的 操作系统的缺省配置的许可范围。必要时参阅 Section 3.5.1 获取有关如何调整这些参数的信息。

SILENT_MODE(bool)

安静地运行服务器.如果设置这个选项, 服务器将自动 在后台运行并且抛弃掉控制 tty,因此不会有任意信息输出到stdoutstderr(和postmaster-S选项效果相同).除非打开了 比如syslog这样的日志系统, 我们不建议使用这个选项,因为这样令查找错误信息非常困难.

SORT_MEM整数

声明在求助于临时磁盘文件之前用于内部排序和散列(hash)的内存 的数量.此值是以千字节为计量单位的,缺省为 1024KB(1MB). 请注意,对于复杂查询,多个排序和/或散列(hash)可能会并行 运行,而且在开始向临时文件输出数据之前, 每个操作都会被允许使用这里声明的数量的内存. 因为每个后端都会做一个或更多的排序,因此需要的空间可能是 SORT_MEM的许多倍. ORDER BY,融合连接,以及CREATE INDEX都会进行排序。

SQL_INHERITANCE布尔

这个选项控制继承语义,尤其是在缺省时是否在各种命令里 把子表包括进来. 版本 7.1 以前是不包括的.如果你需要老特性,你可以把这个变量 设为假,但是从长远看来,我们建议你修改你的应用以使用 ONLY 关键字来排除子表.参考 SQL 语言索引 和 PostgreSQL 7.3.3 用户手册 获取关于继承的更多信息.

SSL(布尔数)

打开 SSL 联接.使用之前请参阅 Section 3.7 .缺省是关.

SUPERUSER_RESERVED_CONNECTIONS (integer)

决定保留给 PostgreSQL 超级用户使用的"连接槽位"。 最多 max_connections 个连接可以同时激活。如果活跃的并发连接 数达到了 max_connections 减去 superuser_reserved_connections 个,那么只有超级用户帐号上来的连接才被接受。

缺省值是 2。这个数值必须比 max_connections 小。 这个参数只能在服务器启动的时候设置。

TCPIP_SOCKET布尔

如果此值为真,那么服务器接受 TCP/IP 联接. 否则只接受本地的 Unix 域套接字联接. 缺省是关闭. 这个选项只能在服务器启动的时候设置.

TRANSFORM_NULL_EQUALS (boolean)

如果打开它,那么下面这样的表达式 expr = NULL (或者 NULL = expr) 被当做 expr IS NULL,处理,也就是说, 如果 expr 得出 NULL 值则返回真,否则返回假. expr = NULL 的正确的行为总是返回 NULL(未知).因此这个选项缺省时是关闭的.

不果,在Microsoft Access里的过滤表单 生成的查询好像使用的是 expr = NULL 测试空值, 因此,如果你使用这个界面访问数据库,你可能想把这个选项打开. 因为形如 expr = NULL 的 表达式总是返回 NULL (使用正确的代换),因此它们并不常用, 而且在一般的应用中也不常见,因此这个选项实际上没有什么害处. 但是新用户常常在涉及 NULL 的表达式语义上感到胡涂, 因此缺省时不打开这个选项.

请注意这个选项只影响文本的 = 操作符, 不包括其它比较操作符或者其它与一些涉及等号操作符的 表达式计算(比如 IN).因此,这个选项不是 垃圾程序的狗皮膏药.

请参考 PostgreSQL 7.3.3 用户手册 获取相关信息.

UNIX_SOCKET_DIRECTORY(string)

声明服务器用于侦听来自客户端应用联接的 Unix 域套接字目录名. 缺省通常是 /tmp,不过可以在制作时改变.

UNIX_SOCKET_GROUP(string)

设置 Unix 域套接字的组所有人.(套接字的所有权用户总是启动 服务器的用户.)与 UNIX_SOCKET_PERMISSIONS 选项一起使用可以给这种套接字类型增加额外的访问控制机制. 缺省时是一个空字串,也就是使用当前用户的缺省的组. 这个选项只能在服务器启动时设置.

UNIX_SOCKET_PERMISSIONS(整型)

给 Unix 域套接字设置访问权限.Unix 域套接字使用通常的 Unix 文件系统权限集.可选的值可以是一个 chmodumask 系统调用可以接受的数字模式. (要使用客户化的八进制格式,该数字必须以 0 (零)开头.)

缺省权限是 0777,意即任何人都可以联接. 合理的选则可能是0770 (只有用户和组, 参阅UNIX_SOCKET_GROUP)和 0700 (只有用户). (请注意对于 Unix 套接字而言,实际上只有写权限有意义,而且 也没有办法设置或者取消读或执行权限.)

这种访问控制机制是和 Chapter 4. 里面描述的那些完全独立的.

这个选项只能在服务器启动时设置.

VIRTUAL_HOST(string)

声明 postmaster 用于侦听来自客户端应用联接的 TCP/IP 主机名或者地址. 缺省是 PGHOST 环境变量的值, 如果没有设置 PGHOST,缺省是侦听 所有配置了的地址(包括localhost).

ZERO_DAMAGED_PAGES (boolean)

侦测到一个损害的页面头通常导致 PostgreSQL 报告一个错误, 并且退出当前事务。把 zero_damaged_pages 设置为真可以让系统 不是报告错误,而是把损坏的页面清零,然后继续执行处理。这种行为 将会破坏数据,也就是那些在损坏页中的行。但是它允许你绕开错误 并且从表中可能还存在的任何未损坏的页面中检索数据行。因此,这个选项在发生因为 硬件或者软件导致的数据损坏的情况下会很有用。除非你已经放弃了从损坏的页面中 恢复数据的努力,否则你不应该设置这个为真。缺省设置为假,并且只有超级用户 才能设置它。

3.4.5. WAL

又见 Section 11.3 获取 WAL 调节的细节.

CHECKPOINT_SEGMENTS(整数)

在自动 WAL 检查点之间的最大距离,单位是日志文件段 (每个段一般是 16 兆字节). 这个选项只能在服务器启动的时候设置,或者设置在 postgresql.conf 文件里.

CHECKPOINT_TIMEOUT(整数)

自动 WAL 检查点之间的最长时间,以秒计. 这个选项只能在服务器启动的时候设置,或者设置在 postgresql.conf 文件里.

CHECKPOINT_WARNING (integer)

如果因为填充检查点段文件导致的检查点发生得比这个数值得秒数更频繁, 则向服务器日志中发送信息。零关闭警告。

COMMIT_DELAY (integer)

写一个提交的记录到 WAL 缓冲和把缓冲冲刷到磁盘上的时间间隔, 以毫秒计.非零的延迟允许多个事务用一个fsync提交,条件是 系统的负荷高到在给出的间隔里其它的事务已经可以提交了. 如果没有其它的事务准备好进行提交,那么这个延迟就是浪费时间. 因此,这个延迟只有在后端把它的提交记录写出的瞬间至少有 COMMIT_SIBLINGS个其它的事务活跃的情况下才执行.

COMMIT_SIBLINGS (integer)

在执行COMMIT_DELAY延迟之前所要求的并行的打开的事务的最低数目. 数值越大,就越有可能至少有另外一个事务在延迟的间隔中做好了提交的 准备.

WAL_BUFFERS(整数)

共享内存中用于 WAL 的磁盘页缓冲区数目。缺省是 4。 这个选项只能在服务器启动时设置.

WAL_DEBUG(整数)

如果为非零,则在stderr上打开与 WAL 相关的调试输出.

WAL_SYNC_METHOD(字串)

用于强制 WAL 更新到磁盘上的方法.可能的数值是 FSYNC (在每次提交时调用fsync()FDATASYNC (在每次提交时调用fdatasync()OPEN_SYNC (用带O_SYNC选项的open() 写 WAL 文件),或者是 OPEN_DATASYNC (用带O_DSYNC选项的open() 写 WAL 文件). 并非在所有平台上都可以使用这些选项. 这个选项只能在服务器启动的时候设置,或者设置在 postgresql.conf 文件里.

3.4.6. 短选项

为了方便起见,这里还为许多参数提供了好多单字母选项开关. 它们在下Table 3-2里描述.

Table 3-2. 短选项键字

短选项评注
-B xshared_buffers = x
-d xserver_min_messages = DEBUGx
-Ffsync = off
-h xvirtual_host = x
-itcpip_socket = on
-k xunix_socket_directory = x
-lssl = on
-N xmax_connections = x
-p xport = 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, 像上面解释地那样。