9.1第十八章

第十八章 服务器配置
目录
18.1 设置参数
18.2 文件位置
18.3 链接和授权
18.3.1 链接设置
18.3.2安全和授权
18.4 资源消耗
18.4.1 内存
18.4.2 内核资源使用
18.4.3 cost-based vacuum delay
18.4.4 后端写进程
18.4.5 非同步行为
18.5 撰写头文件日志
18.5.1 设置
18.5.2 检验点
18.5.3 归档
18.5.4 流式复制
18.5.5 非同步复制
18.5.6 备份服务器
18.6 查询设计
18.6.1 设计方法配置
18.6.2 设计cost 常量
18.6.3 genetic 查询优化
18.6.4 其他设计选项
18.7 错误报告和记录
18.7.1 在哪里记录
18.7.2 什么时候记录
18.7.3 记录什么
18.7.4 使用CSV格式日志输出
18.8 运行时间统计
18.8.1 查询和索引统计器
18.8.2 统计监测
18.9 自动清空
18.10 默认客户链接
18.10.1 语句行为
18.10.2 区域和格式化
18.10.3 其他默认值
18.11 锁定管理
18.12 版本和平台兼容
18.12.1 先前的PostgreSQL 版本
18.12.2 平台和客户兼容
18.13 错误处理
18.14 预设选项
18.15 自定义选项
18.16 开发者选项
18.17 短short选项 
有许多影响数据库系统行为的配置参数。在本章的第一节，我们描述如何设置配置参数，其余节详细讨论每个参数。
18.1 设置参数
所有参数名都不区分大小写，每个参数取五种类型中其中一个值：布尔型、整型、浮点型字符型或枚举。布尔值可以写成on，off，true，false，yes，no，1,0（都不区分大小写）或任何这些值的清晰前缀。
一些设置表示一种内存或时间值。每一种值都有一个暗含的单元，它或是千字节，块（通常为8个千字节），毫秒，秒或分。通过查阅pg_settings.unit 可以找到默认单元。为了方便，也可以清晰的指定不同的单元。有效的内存单元通常是kB，MB，和GB；有效的时间单元是ms（毫秒），s（秒），min（分钟），h（小时），和d（天）。注意内存单元的乘数是1024，而不是1000.
枚举类型的参数和字符参数用同种方式表示，但是只限制在一些受限的值。可以从pg_settings.enumvals中找到允许的值。枚举参数值不区分大小写。
设置这些参数的一种方法就是修改文件postgersql.conf，它一般情况下在data目录中。（在数据库集群目录初始化时安装了一个默认副本）。该文件样式的例子：
# this is a comment 
Log_connections=yes
Log_destination=’syslog’
Search_path=’”$user”,public’
Shared_buffers=128MB
每行指定一个参数，在名字和值之间的等号符号是可选的。空格不重要，忽略空行。警号（#）指明行的其余部分为注释。不是简单标识符或数字的参数值必须用单引号。要在参数值中嵌入一个单引号，或者使用两个引号或用反斜杠。
除了参数设置，postgersql.conf文件可包含include directives,它指定其它要读的和处理的文件，在这点上好似它被插入到配置文件中。Include directives 像：
Include ‘filename’
如果文件名不是一个绝对路径，它被看作是包含参考配置文件的相对路径，inclusions可以被嵌入。
无论什么时候主服务器进程接收到一个SIGHUP信号（它可以最简单的通过pg_ctl reload发送）时都会重读配置文件，主服务器进程也会传送该信号给所有当前在运行的服务器进程以便存在的部分也获得新值。另外您可以直接发送信号给单个服务器进程。一些参数只能在服务器启动时设置，在配置文件中的任何改变都被忽略，直到服务器重启。
设置这些配置参数的第二种方法是在postgres命令中给它们一个命令行选项，像：
Postgres –c log_connections=yes –c log_destination=’syslog’
命令行选项覆盖在postgresql.conf中的任何冲突的设置。注意这意味着您不能通过编辑postgresql.conf来改变on-the-fly的值，因此虽然命令行方法也许很方便，但是它会破坏您的灵活性。
偶尔只给一个特殊部分一个命令行选项是很有用的。环境变量PGOPTIONS在客户端可以用来完成该目的：
Env PGOPTIONS=’-c geqo=off’ psql
(它适合于任何基于libpq的客户应用程序，不仅是psql)。注意它不适合在服务器启动时或就固定了的或必须在postgresql.conf里指定的参数。
而且，分配一系列参数设置给一个用户或数据库是可能的，无论一个部分何时启动，参与的用户和数据库的默认值会被载入。命令ALTER USER 和ALTER DATABASE分别是用来配置这些设置的。Perdatabase
settings override anything received from the postgres command-line or the configuration
file, and in turn are overridden by per-user settings; both are overridden by per-session settings.
用SET命令可以在单个的SQL部分改变一些参数，例如：
SET ENABLE_SEQSCAN TO OFF;
如果允许SET，它覆盖参数值的所有其他源。一些参数不可以通过SET改变：例如，如果它们控制没有重启整个PostgreSQL服务器不能改变的行为。同样，一些SET或ALTER参数修改需要超级用户允许。
SHOW命令允许检查所有参数的当前值。
虚拟表格pg_settings也允许显示和升级登入运行时间参数，参考45.62节获取详细细节和不同变量类型的描述和它们什么时候能改变。Pg_settings与SHOW和SET等同，但是用起来更方便，因为它可以并合其他的表格或用任何想要的选择条件。它也包含了关于允许参数取什么值的更多信息。
18.2 文件位置
除了已经提到的postgresql.conf文件，PostgreSQL也使用两个其他手动编辑的配置文件，它管理客户认证（第19章讨论了它们的使用）。默认情况，所有三个配置文件都存储在数据库集群的数据目录中。本节描述的参数配置文件放在任何位置。（这样做可以减轻管理，尤其是它更简单的确保配置文件被正确地备份。）
Data_directory(string)
指定存储数据的目录，该参数只能在服务器启动时设置。
Config_flie(string)
指定man n服务器配置文件（通常称作postgresql.conf）。该参数只能在postgres命令行中设置。
Hba_file(string)
为基于主机认证指定配置文件（通常称作pg_hba.conf）。该参数只在服务器启动时设置。
Ident_file(string)
为19.2节的用户名映像指定配置文件（通常称作pg_ident.conf），该参数只在服务器启动时设置。
External_pid_file(string)
指定额外进程id（PID）文件的名字，通过服务器管理程序可以建立使用，参数只在服务器启动时设置。
在默认安装中，没有明确地设置上述任何一个参数，相反，data目录通过-D命令选项或PGDATA环境变量指定，并且可以在data目中找到配置文件。
如果您想将配置文件放在其他目录而不是data目录中，postgres-D命令行选项或PGDATA环境变量必须指向包含配置文件的目录，并且data_directory参数必须在postgresql_conf中设置用来显示data目录实际上放在哪里。注意data_directory无视-D和PGDATA所指的data目录的位置，但是不会无视配置文件的位置。
如果您想的话，您可以使用参数config_file,hba_file 和/或ident_file单独指定配置文件名和位置。config_file只能在postgres命令行中指定，但是其他的可以在主配置文件中设置。如果明确设置了三个参数和data_directory，则没有必要指定-D或PGDATA.
在设置这些参数中的任何一个时，将会解读相对于postgres启动目录的一个相对路径。
 18.3 链接和认证 
18.3.1 链接设置
Listen_addresses(string)
指定TCP/IP的地址，从客户应用程序连接。值采用用逗号分开主机名和/或数字IP地址的形式。专用条目*相当于所有可用的IP接口。条目0.0.0.0允许所有IPv4地址，：：允许所有的IPv6地址。如果列表是空的，服务器不听从任何一个IP接口，在这种情况下，只有Unix-domain接口才能连接它。默认值是localhost，它只允许local TCP/IP”回路”连接。当客户端应用程序（第19章）允许精密控制谁能进入服务器，listen_addresses控制哪个接口接受连接尝试，哪个能帮助组织重复的恶意的连接要求进入不安全网络界面。该参数只能在服务器启动时设置。
Port（integer）
服务器听从的TCP端口，默认为5432.注意服务器听从的所有IP地址用同个端口号。该参数只能在服务器启动时设置。
Max_connections(integer)
确定同时连接到数据库服务器的最大数目。默认是100个，但是如果内核设置不支持的话也许会少些。该参数只能在服务器启动时设置。
增加该参数也许会导致PostgreSQL要求比您操作系统默认配置允许的更多的系统V共享内存或信号量。如果有必要的话请参考17.4.1节获取如何调整这些参数的信息。
如果在运行一个备份服务器，您必须将该值设置成与管理服务器的值相同或更高。
Superuser_reserved_connections(integer)
测定PostgreSQL超级用户为连接预留的连接“slots”的数目，多数max_connections的连接能同时激活，
18.3.2安全和授权
18.4 资源消耗
18.4.1 内存
18.4.2 内核资源使用
18.4.3 cost-based vacuum delay
18.4.4 后端写进程
18.4.5 非同步行为
18.5 撰写头文件日志
18.5.1 设置
18.5.2 检验点
18.5.3 归档
18.5.4 流式复制
18.5.5 非同步复制
18.5.6 备份服务器
18.6 查询设计
18.6.1 设计方法配置
18.6.2 设计cost 常量
18.6.3 genetic 查询优化
18.6.4 其他设计选项
18.7 错误报告和记录
18.7.1 在哪里记录
18.7.2 什么时候记录
18.7.3 记录什么
18.7.4 使用CSV格式日志输出
18.8 运行时间统计
18.8.1 查询和索引统计器
18.8.2 统计监测
18.9 自动清空
18.10 默认客户链接
18.10.1 语句行为
18.10.2 区域和格式化
18.10.3 其他默认值
18.11 锁定管理
18.12 版本和平台兼容
18.12.1 先前的PostgreSQL 版本
18.12.2 平台和客户兼容
18.13 错误处理
18.14 预设选项
18.15 自定义选项
18.16 开发者选项
18.17 短short选项
Category:Chinese