Chapter 17. 服务器配置

Table of Contents
17.1. 设置参数
17.2. 文件位置
17.3. 连接和认证
17.3.1. 连接设置
17.3.2. 安全和认证
17.4. 资源消耗
17.4.1. 内存
17.4.2. 自由空间映射
17.4.3. 内核资源使用
17.4.4. 基于开销的清理延迟
17.4.5. 后端写进程
17.5. 预写式日志
17.5.1. 设置
17.5.2. 检查点
17.5.3. 归档
17.6. 查询规划
17.6.1. 规划器方法配置
17.6.2. 规划器开销常量
17.6.3. 基因查询优化器
17.6.4. 其它规划器选项
17.7. 错误报告和日志
17.7.1. 在哪里记录日志
17.7.2. 什么时候记日志
17.7.3. 记录什么
17.8. 运行时统计
17.8.1. 统计监控
17.8.2. 查询和索引统计收集器
17.9. 自动清理
17.10. 客户端连接缺省
17.10.1. 语句行为
17.10.2. 区域和格式化
17.10.3. 其它缺省
17.11. 锁管理
17.12. 版本和平台兼容性
17.12.1. 以前的 PostgreSQL 版本
17.12.2. 平台和客户端兼容性
17.13. 预置的选项
17.14. 客户化的选项
17.15. 开发人员选项
17.16. 短选项

有一堆配置参数可以影响数据库系统的行为。 本章第一节我们将描述一下如何设置它们。然后随后的小节我们将逐个讨论它们。

17.1. 设置参数

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

设置这些选项的一个方法是编辑文件 postgresql.conf, 这个文件通常在数据目录里。(initdb 在那里安装一个缺省的拷贝。) 比如,下面是一个该文件的例子:

# 这是一个注释
log_connections = yes
log_destination = 'syslog'
search_path = '$user, public'

象你看到的那样,选项是每条一行。选项名和值之间的等号是可选的。 空白和空行被忽略。井号(#)用做任何地方引入注释。 非简单标识符或者数字必须用单引号包围。如果需要在参数值里嵌入单引号, 要么写两个单引号(推荐方法),要么用反斜扛包围。

每次postmaster收到SIGHUP(最简单的发送方法就是使用 pg_ctl reload)。 信号后都会重新读取这个配置文件。 postmaster 同时也将这个信号广播给所有正在运行的服务器进程,这样现有会话也能得到新的缺省。 另外,你可以只向一个服务器进程直接发送信号。 有些参数只能在服务器启动的时候设置;对这些条目中的任何进行修改都将忽略,直到下次服务器重启。

第二种设置这些配置参数的方法是把它们作为命令行参数传递给 postmaster, 比如:

postmaster -c log_connections=yes -c log_destination='syslog'

命令行选项覆盖任何与 postgresql.conf 冲突的选项。请注意,这意味着你不能通过编辑 postgresql.conf, 在运行时改变其数值,因此,虽然命令行方法很方便,但你在以后可能会付出灵活性的代价。

有时候,给某一个特定会话一个命令行参数也是很有用的。 可以在客户端使用环境变量 PGOPTIONS 来实现这个目的:

env PGOPTIONS='-c geqo=off' psql

(这个选项可以用于任何基于libpq的客户端应用,不光是 psql。) 请注意,这个变量对那些需要在服务器启动后固定的选项或者必须在 postgresql.conf 里声明的选项是无效的。

并且,我们可以给一个用户或者一个数据库赋予一套选项设置。 在一个会话开始的时候,装载所涉及到的用户和数据库的缺省设置。 命令 ALTER USERALTER DATABASE 分别用于配置这些设置。 每数据库的设置覆盖任何从 postmaster 命令行或者配置文件收到的设置, 然后接着又被每用户的设置覆盖;最后又会都被每会话的选项覆盖。

一些选项可以用 SET 在独立的 SQL 会话中修改, 方法是使用 SET 命令, 比如:

SET ENABLE_SEQSCAN TO OFF;

如果允许用 SET 设置,这种每数据库的设置覆盖任何来自其它方面的设置。 有些参数不能通过SET改变:比如, 如果这些选项不重启动PostgreSQL就无法合理控制其行为。 同样,有些参数是由超级用户通过 SETALTER 修改,而普通用户不能修改。

SHOW 命令允许检查所有参数的当前值。

我们也可以用虚表 pg_settings 来显示和更新当前会话的运行时参数。 (在 Section 42.41 里描述)。 它等效于 SHOWSET,但是用起来更方便,因为它可以和其它表连接起来使用, 或者用任意用户需要的选择条件来查询。