PostgreSQL 8.2.3 中文文档
后退快退章17. 服务器配置快进前进

17.1. 设置参数

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

一些设置指定内存或时间值,其隐含的单位可能是:kB(千字节)、块(通常是 8KB)、毫秒、秒、分钟等等。隐含单位可以通过引用 pg_settings.unit 获取。为了避免混淆,可以在指定数值的同时指定单位。可用内存单位:kB(千字节), MB(兆字节), GB(吉字节);可用时间单位:ms(毫秒), s(秒), min(分钟), h(小时), d(天)。内存单位中的"千"等于 1024 ,而不是 1000 。

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

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

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

除了设置参数以外,postgresql.conf 文件中还可以使用包含指令在其自身所在位置插入其他文件的内容。包含指令的语法如下:

include 'filename'

如果文件名不是绝对路径那么将被当作相对于包含指令所属文件的所在目录。包含可以被嵌套。

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

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

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

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

有时候,给某一个特定会话一个命令行参数也是很有用的。可以在客户端使用环境变量 PGOPTIONS 来实现这个目的(可以用于任何基于 libpq 的客户端应用,不光是 psql):

env PGOPTIONS='-c geqo=off' psql

请注意,这个变量对那些需要在服务器启动后固定的选项或者必须在 postgresql.conf 里声明的选项是无效的。

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

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

SET ENABLE_SEQSCAN TO OFF;

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

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

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


后退首页前进
服务器配置上一级文件位置