有一堆配置参数可以影响数据库系统的行为。 本章第一节我们将描述一下如何设置它们。然后随后的小节我们将逐个讨论它们。
所有参数名都是大小写不敏感的。每个参数都可以接受四种类型之一:布尔, 整数,浮点数和字符串。布尔值可以是 ON,OFF, TRUE,FALSE, YES,NO, 1,0 (都是大小写无关)或这些东西的任意清晰无歧义的前缀。
设置这些选项的一个方法是编辑文件 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 USER 和 ALTER DATABASE 分别用于配置这些设置。 每数据库的设置覆盖任何从 postmaster 命令行或者配置文件收到的设置, 然后接着又被每用户的设置覆盖;最后又会都被每会话的选项覆盖。
一些选项可以用 SET 在独立的 SQL 会话中修改, 方法是使用 SET 命令, 比如:
SET ENABLE_SEQSCAN TO OFF;
如果允许用 SET 设置,这种每数据库的设置覆盖任何来自其它方面的设置。 有些参数不能通过SET改变:比如, 如果这些选项不重启动PostgreSQL就无法合理控制其行为。 同样,有些参数是由超级用户通过 SET 和 ALTER 修改,而普通用户不能修改。
SHOW 命令允许检查所有参数的当前值。
我们也可以用虚表 pg_settings 来显示和更新当前会话的运行时参数。 (在 Section 42.41 里描述)。 它等效于 SHOW 和 SET,但是用起来更方便,因为它可以和其它表连接起来使用, 或者用任意用户需要的选择条件来查询。