↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
历史版本。 PostgreSQL 9.1 已结束支持。 2016-10-27. 请参阅 当前版本手册.

第 18 章 服务器配置

有许多配置参数会影响数据库系统的行为。在本章的第一节中,我们描述如何设置配置参数。后续各节将详细讨论每个参数。

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 中找到。枚举参数值是大小写无关的。

设置这些参数的一种方法是编辑文件 postgresql.conf,它通常保存在数据目录中。(在数据库集簇目录初始化时,会在那里安装该文件的一个默认副本。)该文件的内容可能如下所示:

# This is a comment
log_connections = yes
log_destination = 'syslog'
search_path = '"$user", public'
shared_buffers = 128MB

每行指定一个参数。名称和值之间的等号是可选的。空白不重要,空行会被忽略。井号(#)表示该行余下部分是注释。不是简单标识符或数字的参数值必须用单引号括起。要在参数值中嵌入单引号,可以写两个单引号(推荐)或使用反斜线转义单引号。

除了单个参数设置之外,postgresql.conf文件还可以包含 include 指令,用来指定另一个要读取和处理的文件,就像把该文件插入到配置文件的这个位置一样。include 指令的形式很简单:

include 'filename'

如果文件名不是绝对路径,则会被解释为相对于引用它的配置文件所在目录的路径。include 可以嵌套。

每当主服务器进程收到SIGHUP信号(最简单的方法是使用pg_ctl reload发送)时,配置文件都会被重新读取。主服务器进程还会把这个信号传播给所有正在运行的服务器进程,这样现有的会话也能采用新值。另外,你可以直接向单一的服务器进程发送该信号。有些参数只能在服务器启动时设置,在配置文件中对这些条目的任何更改都将被忽略,直到服务器重启。

设置这些配置参数的第二种方法是作为postgres命令的命令行选项给出它们,例如:

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

命令行选项会覆盖postgresql.conf中的任何冲突设置。注意,这意味着你将无法通过编辑postgresql.conf即时更改该值,因此虽然命令行方法可能很方便,但它之后可能会让你付出灵活性的代价。

偶尔,只给一个特定会话提供命令行选项是有用的。环境变量 PGOPTIONS可以在客户端用于此目的:

env PGOPTIONS='-c geqo=off' psql

(这适用于任何基于libpq的客户端应用,而不仅是 psql。)注意,这对于在服务器启动时固定或者必须在postgresql.conf中指定的参数无效。

此外,可以将一组参数设置分配给一个用户或一个数据库。每当会话启动时,会加载所涉及的用户和数据库的默认设置。ALTER ROLE和ALTER DATABASE命令分别被用来配置这些设置。每数据库设置会覆盖从 postgres命令行或配置文件得到的任何设置,转而又被每用户设置覆盖;两者都会被每会话设置覆盖。

有些参数可以在单独的SQL会话中用SET命令更改,例如:

SET ENABLE_SEQSCAN TO OFF;

如果允许SET,它会覆盖该参数所有其他的值来源。有些参数不能通过 SET更改:例如,如果它们控制的行为不重启整个 PostgreSQL服务器就无法改变。此外,某些SET或ALTER参数修改要求超级用户权限。

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

虚拟表pg_settings也允许显示和更新会话运行时参数;不同变量类型以及何时可以更改它们的详情和描述请参见第 45.62 节。pg_settings等效于SHOW 和SET,但使用起来可能更方便,因为它可以与其他表连接,或者用任何想要的选择条件从中选择。它还包含关于参数允许哪些值的更多信息。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.