pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
有许多配置参数会影响数据库系统的行为。在本节中,我们描述如何设置配置参数;后续各小节将详细讨论每个参数。
所有参数名都是大小写不敏感的。每个参数都接受四种类型之一的值:布尔、整数、浮点数或字符串。布尔值可以被写成ON、OFF、TRUE、FALSE、YES、NO、1、0(都是大小写不敏感的)或者这些值的任何无歧义前缀。
设置这些参数的一种方法是编辑文件postgresql.conf,它通常保存在数据目录中。(initdb会在那里安装一个默认副本。)该文件的内容可能如下所示:
# This is a comment 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命令行或配置文件收到的任何内容,而后者又被每用户的设置覆盖;两者都会被每会话的选项覆盖。
有些参数可以在各个SQL会话中用SET命令更改,例如:
SET ENABLE_SEQSCAN TO OFF;
如果允许SET,它将覆盖该参数所有其他来源的值。有些参数不能通过SET更改:例如,控制在不重启PostgreSQL的情况下无法合理更改的行为的参数。此外,有些参数可以由超级用户通过SET或ALTER修改,但普通用户不能。
SHOW命令允许查看所有参数的当前值。
虚拟表pg_settings(见第 41.35 节)也允许显示和更新会话的运行时参数。它等价于SHOW和SET,但用起来可能更方便,因为它可以与其他表连接,或者用任何想要的选取条件从中选取。
除了已经提到过的postgresql.conf文件之外,PostgreSQL还使用另外两个手工编辑的配置文件,它们控制客户端认证(其使用在第 19 章中讨论)。默认情况下,所有三个配置文件都存放在数据库集簇的数据目录中。 本节描述的参数允许配置文件放在别的地方(这么做可以简化管理,特别是如果配置文件被独立放置,可以很容易保证它得到恰当的备份)。
data_directory (string) #指定用于数据存储的目录。这个参数只能在服务器启动时设置。
config_file (string) #指定主服务器配置文件(通常叫postgresql.conf)。这个参数只能在服务器启动时设置。
hba_file (string) #指定基于主机认证配置文件(通常叫pg_hba.conf)。这个参数只能在服务器启动的时候设置。
ident_file (string) #指定用于ident认证的配置文件(通常叫pg_ident.conf)。这个参数只能在服务器启动的时候设置。
external_pid_file (string) #指定postmaster应为服务器管理程序创建的一个附加进程号(PID)文件的名称。这个参数只能在服务器启动时设置。
在默认安装中不会显式设置以上参数。相反,命令行参数-D或者环境变量PGDATA指定数据目录,并且上述配置文件都能在数据目录中找到。
如果你想把配置文件放在别的地方而不是数据目录中,那么 postmaster 的-D命令行选项或者环境变量PGDATA必须指向包含配置文件的目录,并且postgresql.conf中(或者命令行上)的data_directory参数必须设置为数据目录的实际位置。请注意,data_directory将覆盖-D和PGDATA指定的数据目录位置,但是不覆盖配置文件的位置。
如果你愿意,可以使用选项config_file、hba_file和/或ident_file单独指定配置文件名称和位置。config_file只能在postmaster命令行上指定,但是其他参数可以在主配置文件中设置。如果所有三个参数外加data_directory被显式地设置,则不必指定-D或PGDATA。
在设置任何这些参数时,相对路径将被解释为相对于启动 postmaster 时所在目录的路径。
listen_addresses (string) #指定服务器用于监听客户端应用连接的 TCP/IP 地址。此值采用以逗号分隔的主机名和/或数字 IP 地址列表的形式。特殊项*对应所有可用的 IP 接口。如果列表为空,服务器不会监听任何 IP 接口,此时只能通过 Unix 域套接字连接。默认值为 localhost, 它只允许建立本地“回环”连接。此参数只能在服务器启动时 设置。
port (integer) #服务器监听的 TCP 端口,默认是 5432。请注意,服务器监听的所有 IP 地址都使用同一个端口号。 此参数只能在服务器启动时设置。
max_connections (integer) #决定数据库服务器允许的最大并发连接数。默认值通常是 100 个连接,但如果内核设置不支持 (在 initdb 期间确定),则可能更少。这个参数只能在服务器启动时设置。
增加这个参数可能会导致PostgreSQL请求比你的操作系统默认配置所允许的更多的System V共享内存或信号量。如果有必要,关于如何调整那些参数的信息见第 16.5.1 节。
superuser_reserved_connections (integer) #决定为 PostgreSQL 超级用户连接保留多少个连接“槽”。 同时活跃的连接数最多始终只能达到 max_connections。 当活跃并发连接数至少达到 max_connections 减去 superuser_reserved_connections 时,新连接将只接受超级用户, 并且不再接受新的复制连接。
默认值是 3 个连接。该值必须小于 max_connections。 这个参数只能在服务器启动时设置。
unix_socket_directory (string) #指定服务器用于监听来自客户端应用连接的 Unix 域套接字目录。 默认值通常是 /tmp,但可以在构建时更改。这个 参数只能在服务器启动时设置。
unix_socket_group (string) #设置 Unix 域套接字的所属组(套接字的所属用户总是启动服务器的 用户)。与参数 unix_socket_permissions 组合, 可以作为一种针对 Unix 域连接的附加访问控制机制。默认是一个空 字符串,表示当前用户的默认组。这个参数只能在服务器启动时设置。
unix_socket_permissions (integer) #设置 Unix 域套接字的访问权限。Unix 域套接字使用通常的 Unix 文件系统权限集。参数值应是以 chmod 和 umask 系统调用所接受格式指定的数字权限模式。(要使用惯用的八进制格式,数字必须以 0(零)开头。)
默认权限是 0777,表示任何人都可以连接。合理的其他取值包括 0770(仅属主和所属组,另见 unix_socket_group)和 0700(仅属主)。(注意,对 Unix 域套接字而言,只有写权限起作用,因此设置或撤销读权限和执行权限没有意义。)
此访问控制机制独立于 第 19 章 中描述的机制。
此参数只能在服务器启动时设置。
rendezvous_name (string) #指定Rendezvous广播名称。默认使用计算机名,即指定为空字符串''。如果服务器编译时没有Rendezvous支持,则忽略此选项。这个选项只能在服务器启动时设置。
authentication_timeout (integer) #完成客户端认证的最长时间,以秒为单位。如果一个潜在客户端没有在这段时间里完成认证协议,服务器将断开连接。这防止了挂起的客户端无限期占用连接。这个选项只能在服务器启动时或在postgresql.conf文件中设置。默认值是 60。
ssl (boolean) #启用SSL连接。使用前请阅读第 16.8 节。默认是关闭的。这个参数只能在服务器启动时设置。
ssl_renegotiation_limit (integer) #指定在一个SSL加密连接上可以流过多少数据之后将进行会话密钥的重新协商。当可以检查大量流量时,重新协商能降低攻击者进行密码分析的机会,但它也会带来很大的性能损失。该限制以发送和接收流量的总和来检查。如果这个参数被设置为 0,则禁用重新协商。默认值为0。
2009 年 11 月之前的 SSL 库在使用 SSL 重新协商时不安全,原因是 SSL 协议中的一个漏洞。作为针对该漏洞的权宜修复,一些厂商发布的 SSL 库不具备重新协商能力。如果在客户端或服务器上正在使用这类库,应当禁用 SSL 重新协商。
password_encryption (boolean) #在CREATE USER或ALTER USER中指定密码,且既没有写ENCRYPTED也没有写UNENCRYPTED时,这个选项决定密码是否被加密。默认是打开的(加密密码)。
krb_server_keyfile (string) #设置服务器的Kerberos密钥文件的位置。详情请参考第 19.2.3 节。
db_user_namespace (boolean) #此参数启用各数据库独立的用户名。默认是关闭的。这个选项只能在服务器启动时设置。
如果启用此参数,你应以username@dbname的形式创建用户。 连接的客户端传入username时,会在用户名后附加@和数据库名, 然后由服务器查找此数据库专属的用户名。请注意,在 SQL 环境中创建名称包含@的用户时,需要用引号括起用户名。
启用此参数后,仍然可以创建普通的全局用户。只需在客户端指定用户名时 附加@。服务器查找用户名之前会去掉 @。
此特性旨在作为找到完整解决方案之前的临时措施。届时将移除此选项。
shared_buffers (integer) #设置数据库服务器使用的共享内存缓冲区数量。默认值通常是 1000,但如果你的内核设置不支持(在initdb期间确定),则可能更少。除非构建服务器时选择了不同的BLCKSZ值,每个缓冲区是 8192 字节。这个设置必须至少为 16,并且至少为max_connections值的两倍。不过,要获得良好性能,通常需要远高于该最小值的设置。如果可能,建议使用 1000 到 3000 之间的值。这个参数只能在服务器启动时设置。
增加这个参数可能会导致PostgreSQL请求比你的操作系统默认配置所允许的更多的System V共享内存。如果有必要,关于如何调整那些参数的信息见第 16.5.1 节。
work_mem (integer) #指定内部排序操作和哈希表在切换到临时磁盘文件之前使用的内存量。值以千字节为单位指定,默认值为 1024(1 MB)。请注意,复杂查询可能并行执行多个排序或哈希操作,每个操作在开始向临时文件写入数据之前,都可以使用此值指定的内存量。此外,多个正在运行的会话也可能并发执行此类操作。因此,使用的总内存量可能是 work_mem 值的数倍;选择此值时必须考虑这一点。排序操作用于 ORDER BY、DISTINCT 和归并连接。哈希表用于哈希连接、基于哈希的聚合、以及基于哈希的 IN 子查询处理。
maintenance_work_mem (integer) #指定维护操作(如 VACUUM、CREATE INDEX 和 ALTER TABLE ADD FOREIGN KEY)可使用的最大内存量。值以千字节为单位指定,默认值为 16384(16 MB)。由于一个数据库会话一次只能执行一个此类操作,而一个数据库系统通常也不会并发运行很多此类操作,因此可以安全地将该值设得远大于 work_mem。更大的设置可能改善清理和恢复数据库转储的性能。
max_stack_depth (integer) #指定服务器执行栈的最大安全深度。此参数的理想设置是由内核强制执行的实际栈大小限制(如由ulimit -s或本地等效设置),减去大约一兆字节的安全余量。需要安全余量是因为服务器中并非每个例程都检查栈深度,而只在可能递归的关键例程(如表达式求值)中检查。把这个参数设置得高于实际的内核限制将意味着一个失控的递归函数可能会导致一个独立的后端进程崩溃。默认设置是 2048 KB(两兆字节),这个值较小,比较保守,不太可能崩溃;但对于复杂函数来说这可能太小。只有超级用户才能更改此设置。
max_files_per_process (integer) #设置每个服务器子进程允许同时打开的最大文件数量。默认值为一千个文件。如果内核强制实施了安全的每进程上限,就不必担心此设置。但在某些平台上(尤其是大多数 BSD 系统),内核允许单个进程打开的文件数量很大,如果很多进程都尝试打开这么多文件,就会远超系统实际能够支持的总量。如果遇到 “Too many open files”(打开的文件过多)错误,可尝试减小此设置。此参数只能在服务器启动时设置。
preload_libraries (string) #这个变量指定在服务器启动时预装载的一个或多个共享库。可以选择为每个库调用一个无参数的初始化函数。要指定它,可以在库名后面加上冒号和初始化函数的名称。例如'$libdir/mylib:mylib_init'会导致mylib被预装载并执行mylib_init。如果要装载多个库,用逗号分隔它们的名字。
如果找不到指定的库或初始化函数,服务器将启动失败。
PostgreSQL过程语言库可以这样预装载,通常使用语法'$libdir/plXXX:plXXX_init',其中XXX是pgsql、perl、tcl或python。
通过预装载共享库(并在适用时初始化它),可以避免首次使用该库时的库启动时间。不过,每个新服务器进程的启动时间可能略有增加,即使该进程从不使用该库。因此,只有在大多数会话中都会用到的库才推荐使用此选项。
执行 VACUUM 和 ANALYZE 命令期间,系统维护一个内部计数器,记录已执行的各种 I/O 操作的估算代价。 当累计代价达到上限(由 vacuum_cost_limit 指定)时,执行该操作的进程会休眠一小段时间,时长由 vacuum_cost_delay 指定。 随后重置计数器并继续执行。
此功能让管理员能够降低这些命令对并发数据库活动的 I/O 影响。在许多情况下,VACUUM 和 ANALYZE 等维护命令是否快速完成并不重要, 但避免它们显著干扰系统执行其他数据库操作的能力通常很重要。基于代价的清理延迟为管理员提供了实现这一点的方法。
此功能默认禁用。要启用它,将 vacuum_cost_delay 变量设为非零值。
vacuum_cost_delay (integer) #超过代价上限后,进程将休眠的时长,单位为毫秒。默认值为零,表示禁用基于代价的清理延迟功能。正值会启用基于代价的清理。注意,在许多系统上,休眠延迟的有效分辨率为 10 毫秒;将 vacuum_cost_delay 设为不是 10 的倍数的值,可能与将它设为下一个更大的 10 的倍数效果相同。
vacuum_cost_page_hit (integer) #清理在共享缓冲区缓存中找到的缓冲区时所计入的估算代价。它表示锁定缓冲池、查找共享哈希表和扫描页内容的代价。默认值为 1。
vacuum_cost_page_miss (integer) #清理必须从磁盘读取的缓冲区时所计入的估算代价。它表示锁定缓冲池、查找共享哈希表、从磁盘读取所需数据块并扫描其内容所需的工作量。默认值为 10。
vacuum_cost_page_dirty (integer) #清理操作修改原本干净的数据块时所计入的估算代价。它表示再次将脏块刷盘所需的额外 I/O。默认值为 20。
vacuum_cost_limit (integer) #会使清理进程休眠的累计代价。默认值为 200。
某些操作持有关键的锁,因此应尽快完成。这些操作期间不会发生基于代价的清理延迟,所以累计代价可能远超指定上限。 为避免此时出现无益的长时间延迟,实际延迟按 vacuum_cost_delay * accumulated_balance / vacuum_cost_limit 计算, 但最大不超过 vacuum_cost_delay * 4。
从PostgreSQL 8.0 开始,有一个独立的服务器进程,称为后台写入器,它唯一的职责就是对“脏”共享缓冲区发出写操作。这样做的意图是,处理用户查询的服务器进程应当很少或完全不需要等待写操作的发生,因为后台写入器会完成它。这种安排也降低了与检查点相关的性能损失。后台写入器会把脏页持续不断地慢慢写到磁盘上,这样当检查点时刻到来时,只需要强制写出少量页面,而不是过去每个检查点发生的那种脏缓冲区写入风暴。不过,总体 I/O 负载会有净增加,因为一个反复变脏的页面以前可能每个检查点间隔只写一次,而后台写入器可能在同一间隔内写它多次。在大多数情况下,持续的低压负载比周期性的尖峰更可取,但本小节讨论的参数可以用来根据本地需求调整这一行为。
bgwriter_delay (integer) #指定后台写入器各轮活动之间的延迟。每一轮中,写入器会对一定数量的脏缓冲区发出写操作(由下面的参数控制)。被选中的缓冲区总是当前脏缓冲区中最近最少使用的那些。然后它休眠bgwriter_delay毫秒,再重复此过程。默认值是 200。注意,在许多系统上,休眠延迟的有效分辨率为 10 毫秒;将bgwriter_delay设为不是 10 的倍数的值,可能与将它设为下一个更大的 10 的倍数效果相同。这个选项只能在服务器启动时或在postgresql.conf文件中设置。
bgwriter_percent (integer) #在每一轮中,写入的当前脏缓冲区不会超过这个百分比(任何小数部分都向上取整为整数个缓冲区)。默认值是 1。这个选项只能在服务器启动时或在postgresql.conf文件中设置。
bgwriter_maxpages (integer) #在每一轮中,写入的脏缓冲区不会超过这个数目。默认值是 100。这个选项只能在服务器启动时或在postgresql.conf文件中设置。
较小的bgwriter_percent和bgwriter_maxpages值可以减少后台写入器带来的额外 I/O 负载,但会把更多工作留到检查点时刻完成。要减少检查点时的负载尖峰,可以增大这些值。要完全禁用后台写入,可将bgwriter_percent和/或bgwriter_maxpages设置为零。
关于 WAL 与检查点调优的细节,另见 第 25.2 节。
fsync (boolean) #如果打开这个参数,PostgreSQL服务器将在若干位置使用fsync()系统调用,以确保更新被物理地写入到磁盘。这保证了在一次操作系统或硬件崩溃之后,数据库集簇能够恢复到一个一致的状态。
不过,使用fsync()会带来性能损失:提交一个事务时,PostgreSQL必须等待操作系统把预写式日志刷出到磁盘。当禁用fsync时,操作系统被允许尽力缓冲、排序和延迟写操作。这可以显著提升性能。但是,如果系统崩溃,最近若干已提交事务的结果可能会部分或全部丢失。在最坏的情况下,可能发生不可恢复的数据损坏。(数据库服务器自身的崩溃在这里不是风险因素。只有操作系统级别的崩溃才会带来损坏的风险。)
由于其中涉及风险,fsync没有一个普遍正确的设置。有些管理员总是禁用fsync,另一些管理员只在大批量装载时关闭它(这样出了问题时有一个明确的重启点),还有一些管理员一直保持fsync打开。默认是启用fsync,以获得最大的可靠性。如果你信任你的操作系统、你的硬件和你的电力公司(或你的电池备份),可以考虑禁用fsync。
这个选项只能在服务器启动时或在postgresql.conf文件中设置。
wal_sync_method (string) #用于把 WAL 更新强制写入磁盘的方法。可选值是fsync(在每次提交时调用fsync())、fdatasync(在每次提交时调用fdatasync())、fsync_writethrough(在 Windows 上每次提交时调用_commit())、open_sync(用open()选项O_SYNC写 WAL 文件)以及open_datasync(用open()选项O_DSYNC写 WAL 文件)。并非所有这些选择在所有平台上都可用。如果fsync是关闭的,则此设置无关紧要。这个选项只能在服务器启动时或在postgresql.conf文件中设置。
wal_buffers (integer) #为 WAL 数据在共享内存中分配的磁盘页缓冲区数量。默认值是 8。这个设置只需要大到足以容纳一个典型事务产生的 WAL 数据量。这个选项只能在服务器启动时设置。
commit_delay (integer) #把一个提交记录写入 WAL 缓冲区和把缓冲区刷出到磁盘之间的时间延迟,以微秒计。如果系统负载足够高,使得额外的事务在给定间隔内变为准备好提交,一个非零的延迟可以允许多个事务只用一次fsync()系统调用提交。但如果没有其他事务变为准备好提交,这个延迟就纯属浪费。因此,只有当服务器进程写完它的提交记录的那一刻,至少有commit_siblings个其他事务处于活动状态时,才会执行该延迟。默认值为零(无延迟)。
commit_siblings (integer) #执行commit_delay延迟前要求的并发活动事务的最小数目。大一些的值会导致在延迟间隔期间更可能有至少另外一个事务准备好提交。默认值是五个事务。
checkpoint_segments (integer) #自动 WAL 检查点之间的最大距离,以日志文件段计(每个段通常为 16 兆字节)。默认值是三。这个选项只能在服务器启动时或在postgresql.conf文件中设置。
checkpoint_timeout (integer) #自动 WAL 检查点之间的最长时间,以秒为单位。默认值是 300 秒。这个选项只能在服务器启动时或在postgresql.conf文件中设置。
checkpoint_warning (integer) #如果由填充检查点段文件导致的检查点发生得比这个秒数更接近,就向服务器日志写一条消息(这建议应该增大checkpoint_segments的值)。默认值是 30 秒。零会禁用警告。
archive_command (string) #用于归档 WAL 文件序列中一个已完成段的 shell 命令。如果它是空字符串(默认值),WAL 归档被禁用。字符串中的任何 %p 都会被替换为要归档文件的路径名,任何 %f 则只替换为文件名。(路径名相对于服务器的 工作目录,即集簇的数据目录。)使用 %% 可以在 命令中嵌入一个真正的 % 字符。更多信息见 第 22.3.1 节。
这个参数只能在 postgresql.conf 文件或服务器 命令行中设置。有一点很重要:该命令当且仅当成功时才返回零退出 状态。示例:
archive_command = 'cp "%p" /mnt/server/archivedir/"%f"' archive_command = 'copy "%p" "C:\\server\\archivedir\\%f"' # Windows
这些配置参数提供了一种较为粗糙的方法,用于影响查询优化器所选择的查询计划。 如果优化器为某个特定查询选择的默认计划并不理想,一种临时解决方案是 使用这些配置参数强制优化器选择另一种计划。不过,永久关闭其中 某项设置很少是个好主意。改善优化器所选计划质量的更好办法包括 调整规划器代价常数 (见 规划器代价常量 )、手工运行 ANALYZE、增加 default_statistics_target 配置参数的值,以及使用 ALTER TABLE SET STATISTICS 增加为特定列收集的统计信息量。
enable_hashagg (boolean) #启用或禁用查询规划器对哈希聚合计划类型的使用。默认值为 on。
enable_hashjoin (boolean) #启用或禁用查询规划器对哈希连接计划类型的使用。默认值为 on。
enable_indexscan (boolean) #启用或禁用查询规划器对索引扫描计划类型的使用。默认值为 on。
enable_mergejoin (boolean) #启用或禁用查询规划器对归并连接计划类型的使用。默认值为 on。
enable_nestloop (boolean) #允许或禁止查询规划器使用嵌套循环连接计划。它不可能完全禁止嵌套循环连接,但是关闭这个变量将使得规划器尽可能优先使用其他方法。默认值是 on。
enable_seqscan (boolean) #允许或禁止查询规划器使用顺序扫描计划类型。它不可能完全禁止顺序扫描,但是关闭这个变量将使得规划器尽可能优先使用其他方法。默认值是 on。
enable_sort (boolean) #允许或禁止查询规划器使用显式排序步骤。它不可能完全禁止显式排序,但是关闭这个变量将使得规划器尽可能优先使用其他方法。默认值是 on。
enable_tidscan (boolean) #允许或禁止查询规划器使用TID扫描计划类型。默认值是 on。
遗憾的是,没有明确的方法可以确定下面这组“代价”变量的理想值。建议你多做试验并分享你的发现。
effective_cache_size (floating point) #设置规划器对一次单一索引扫描可用的有效磁盘缓存尺寸的假设。这会被计入使用索引的代价估计;更高的值使得索引扫描更可能被使用,更低的值使得顺序扫描更可能被使用。设置这个参数时,你应当同时考虑PostgreSQL的共享缓冲区和将被用于 PostgreSQL 数据文件的内核磁盘缓存部分。此外,还要考虑使用不同索引的并发查询的预期数量,因为它们必须共享可用空间。这个参数不影响PostgreSQL分配的共享内存大小,也不保留内核磁盘缓存;它只用于估计目的。值以磁盘页计量,通常每页 8192 字节。默认值是 1000。
random_page_cost (floating point) #设置规划器对一次非顺序获取的磁盘页面的代价估计。它以一次顺序页面获取代价的倍数来计量。更高的值使顺序扫描更可能被使用,更低的值使索引扫描更可能被使用。默认值是四。
cpu_tuple_cost (floating point) #设置规划器对一次查询中处理每一行的代价估计。默认值是 0.01。
cpu_index_tuple_cost (floating point) #设置规划器对一次索引扫描中处理每一个索引项的代价估计。默认值是 0.005。
cpu_operator_cost (floating point) #设置规划器对WHERE子句中处理每个操作符的代价估计。它以一次顺序页面获取代价的一个分数来计量。默认值是 0.0025。
geqo (boolean) #允许或禁止遗传查询优化,它是一种试图不做穷举搜索来进行查询规划的算法。默认是启用。geqo_threshold变量提供了一种更细粒度的方式,可以对某些类别的查询禁用 GEQO。
geqo_threshold (integer) #只有当涉及的FROM项数量至少有这么多个的时候,才使用遗传查询优化(注意一个FULL OUTER JOIN只被计为一个FROM项)。默认值是 12。对于更简单的查询,通常会使用普通的穷举搜索规划器,但是对于有很多表的查询穷举搜索会花很长时间,通常比执行一个次优的计划带来的惩罚值还要长。因此,在查询尺寸上的一个阈值是管理 GEQO 使用的一种方便的方法。
geqo_effort (integer) #控制 GEQO 中规划时间和查询计划质量之间的权衡。此变量必须是 1 到 10 之间的整数。默认值是 5。较大的值会增加查询规划所用的时间,但也会提高选择高效查询计划的可能性。
geqo_effort实际并不直接做任何事情;它只是被用来计算其他影响 GEQO 行为的变量(如下所述)的默认值。如果你愿意,你可以手工设置其他参数。
geqo_pool_size (integer) #控制 GEQO 使用的池尺寸,它就是遗传种群中的个体数目。它必须至少为 2,且有用的值通常在 100 到 1000 之间。如果它被设置为零(默认设置)则会基于geqo_effort和查询中表的数量选择一个合适的值。
geqo_generations (integer) #控制 GEQO 使用的代数,即算法的迭代次数。它必须至少为 1,通常有用的值与池大小处于相同范围。如果设置为零(默认设置),则根据geqo_pool_size选择合适的值。
geqo_selection_bias (floating point) #控制 GEQO 使用的选择偏好。选择偏好是种群中的选择压力。值可以是 1.5 到 2.0 之间,后者是默认值。
default_statistics_target (integer) #为没有通过ALTER TABLE SET STATISTICS设置列特定目标的表列设置默认统计目标。更大的值增加了需要做ANALYZE的时间,但是可能会改善规划器的估计质量。默认值是 10。有关PostgreSQL查询规划器使用的统计信息的更多内容, 请参考第 13.2 节。
from_collapse_limit (integer) #如果生成的FROM列表不超过这么多项,规划器将把子查询融合到上层查询。较小的值可以减少规划时间,但是可能会生成较差的查询计划。默认值是 8。通常应让它小于geqo_threshold。
join_collapse_limit (integer) #每当得到的项目列表总数不超过这个数目时,规划器就会把显式的内JOIN结构重写为FROM项列表。在PostgreSQL 7.4 之前,通过JOIN构造指定的连接永远不会被查询规划器重新排序。此后查询规划器得到了改进,以内连接形式书写的连接可以被重新排序;这个配置参数控制这种重排进行的程度。
目前,通过JOIN构造指定的外连接的顺序永远不会被查询规划器调整;因此,join_collapse_limit对此行为没有影响。将来的PostgreSQL版本可能会改进规划器,使某些类别的外连接也可以重排。
默认情况下,这个变量被设置成与from_collapse_limit相同,这适合大多数使用。把它设置为 1 可以避免任何内JOIN的重排。这样,查询中指定的显式连接顺序就是关系实际连接的顺序。查询规划器并不总是选择最优的连接顺序;高级用户可以选择把这个变量临时设置为 1,然后显式地指定他们想要的连接顺序。把这个变量设置为 1 的另一个后果是,查询规划器的行为会更像PostgreSQL 7.3 的查询规划器,出于向后兼容的考虑,有些用户可能觉得这很有用。
把这个变量设置为 1 到from_collapse_limit之间的值,可能有助于在规划时间和所选计划的质量之间做出权衡(更高的值产生更好的计划)。
log_destination (string) #PostgreSQL支持多种记录服务器消息的方法,包括stderr和syslog。在 Windows 上,还支持eventlog。将此参数设为所需日志目的地的逗号分隔列表。默认只将日志记录到stderr。此参数只能在postgresql.conf文件中或在服务器命令行上设置。
redirect_stderr (boolean) #这个参数允许把发送到stderr的消息捕获并重定向到日志文件中。这种方法与记录到stderr相结合,通常比记录到syslog更有用,因为某些类型的消息可能不会出现在syslog输出中(一个常见的例子是动态链接器的失败消息)。这个参数只能在服务器启动时设置。
log_directory (string) #当redirect_stderr被启用时,这个参数决定日志文件将被在哪个目录下创建。它可以被指定为一个绝对路径,也可以被指定为一个相对于集簇数据目录的相对路径。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。
log_filename (string) #当redirect_stderr被启用时,这个参数设置被创建的日志文件的文件名。该值被视为一种strftime模式,因此%转义可以被用来指定根据时间变化的文件名。如果不存在%转义,PostgreSQL将追加新日志文件创建时间的纪元。例如,如果log_filename是server_log,那么在 Sun Aug 29 19:02:33 2004 MST 开始的日志的文件名将是server_log.1093827753。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。
log_rotation_age (integer) #当redirect_stderr被启用时,这个参数决定单个日志文件的最长使用时间。经过指定的分钟数之后,将创建一个新的日志文件。 将这个参数设置为零将禁用基于时间的新日志文件创建。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。
log_rotation_size (integer) #当redirect_stderr被启用时,这个参数决定一个个体日志文件的最大尺寸。 当指定千字节数的数据被写入一个日志文件后,将创建一个新的日志文件。 设置为零时将禁用基于大小创建新的日志文件。 这个参数只能在postgresql.conf文件中或在服务器命令行上设置。
log_truncate_on_rotation (boolean) #当redirect_stderr被启用时,这个参数将导致PostgreSQL截断(覆盖而不是追加)任何已有的同名日志文件。不过,截断只在一个新文件由于基于时间的轮转被打开时发生,在服务器启动或基于尺寸的轮转时不会发生。如果被关闭,在所有情况下以前存在的文件将被追加。例如,使用这个设置和一个类似postgresql-%H.log的log_filename将导致产生 24 个每小时的日志文件,并且循环地覆盖它们。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。
示例:保留7天的日志,每天一个日志文件,命名为server_log.Mon,server_log.Tue,等等,并自动用本周的日志覆盖上周的日志,将log_filename设置为server_log.%a,将log_truncate_on_rotation设置为on,将log_rotation_age设置为1440。
示例:要保留 24 小时的日志,每个小时一个日志文件,如果日志文件尺寸超过 1GB,也会提前轮转。可以这样做:将log_filename设置为server_log.%H%M、 将log_truncate_on_rotation设置为on、 将log_rotation_age设置为60并且 将log_rotation_size设置为1000000。 在log_filename中包含%M,可让按文件大小触发的轮转选用与整点初始文件名不同的新文件名。
syslog_facility (string) #当启用了向syslog记录时,这个参数决定要使用的syslog“设施”。你可以在LOCAL0、LOCAL1、LOCAL2、LOCAL3、LOCAL4、LOCAL5、LOCAL6、LOCAL7中选择,默认值是LOCAL0。还请参阅系统的syslog守护进程的文档。除非服务器编译时带有syslog支持,此参数不可用。
syslog_ident (string) #当启用了向syslog记录时,这个参数决定用来标识syslog中的PostgreSQL消息的程序名。默认值是postgres。除非服务器编译时带有syslog支持,此参数不可用。
client_min_messages (string) #控制将哪些消息级别发送给客户端。有效值是DEBUG5、 DEBUG4、DEBUG3、DEBUG2、 DEBUG1、LOG、NOTICE、 WARNING和ERROR。每个级别都包括其后的所有级别。级别越靠后,被发送的消息越少。默认值是NOTICE。注意,LOG在这里的排名与在 log_min_messages中不同。
log_min_messages (string) #控制将哪些消息级别写入服务器日志。有效值是DEBUG5、DEBUG4、 DEBUG3、DEBUG2、DEBUG1、 INFO、NOTICE、WARNING、 ERROR、LOG、FATAL 和 PANIC。每个级别都包含它后面的所有级别。级别越靠后,发送到日志的消息越少。 默认值是NOTICE。注意,LOG在这里的排名与在 client_min_messages中不同。只有超级用户可以更改此设置。
log_error_verbosity (string) #控制在服务器日志中记录的每条消息的详细程度。有效值为TERSE、 DEFAULT和VERBOSE,它们依次在显示的消息中增加更多字段。 只有超级用户能更改这个设置。
log_min_error_statement (string) #控制在服务器日志中记录哪些导致错误条件的SQL语句。对于达到指定严重级别或更高级别的消息,其日志条目中会包含当前 SQL语句。有效值是DEBUG5、 DEBUG4、DEBUG3、 DEBUG2、DEBUG1、 INFO、NOTICE、 WARNING、ERROR、 FATAL 和 PANIC。 默认值是ERROR,表示导致错误、致命错误或恐慌的语句将被记录。 要有效地关闭失败语句的记录,可将此参数设置为PANIC。 只有超级用户可以更改此设置。
log_min_duration_statement (integer) #如果一条已完成语句的运行时间至少达到指定毫秒数,就记录其持续时间。 将此值设置为零会打印所有语句的持续时间。 负一(默认值)禁用语句持续时间记录。例如,如果设置为250, 则会记录所有运行 250ms 或更长时间的 SQL 语句。启用此参数有助于发现应用中未优化的查询。 只有超级用户能更改这个设置。
silent_mode (boolean) #静默地运行服务器。如果设置了这个选项,服务器将自动在后台运行并脱离任何控制终端(与postmaster的-S选项效果相同)。服务器的标准输出和标准错误被重定向到/dev/null,因此发送给它们的所有消息都会丢失。除非选择了syslog日志或者启用了redirect_stderr,否则不鼓励使用此参数,因为它会使错误消息无法被看到。这个选项只能在服务器启动时设置。
下面是这些设置中使用的各种消息严重级别的列表:
DEBUG[1-5]提供供开发者使用的信息。
INFO提供用户隐式请求的信息,例如在VACUUM VERBOSE期间。
NOTICE提供可能对用户有帮助的信息,例如长标识符的截断以及作为主键一部分的索引的创建。
WARNING向用户提供警告,例如在事务块之外的COMMIT。
ERROR报告导致当前命令中止的错误。
LOG报告管理员可能感兴趣的信息,例如检查点活动。
FATAL报告导致当前会话中止的错误。
PANIC报告导致所有会话中止的错误。
debug_print_parse (boolean)debug_print_rewritten (boolean)debug_print_plan (boolean)debug_pretty_print (boolean)这些选项启用各种调试输出。对每个执行的查询,它们打印得到的解析树、查询重写器输出或执行计划。debug_pretty_print会对这些显示进行缩进,产生更可读但也长得多的输出格式。client_min_messages或log_min_messages必须分别是DEBUG1或更低,才能把这些输出真正发送到客户端或服务器日志。这些选项默认是关闭的。
log_connections (boolean) #向服务器日志输出一行,详述每个成功的连接。默认是关闭的,尽管它可能非常有用。这个选项只能在服务器启动时或在postgresql.conf配置文件中设置。
log_disconnections (boolean) #在服务器日志中输出一行,类似于log_connections,但是在会话结束时,并且包含会话的持续时间。默认是关闭的。这个选项只能在服务器启动时或在postgresql.conf配置文件中设置。
log_duration (boolean) #记录每个满足log_statement的已完成语句的持续时间。使用这个选项时,如果你没有使用syslog,建议你用log_line_prefix记录 PID 或会话 ID,这样就可以用进程 ID 或会话 ID 把语句和持续时间关联起来。默认是关闭的。只有超级用户能更改这个设置。
log_line_prefix (string) #这是一个printf风格的字符串,输出在每条日志行的开头。默认是空字符串。每个被识别的转义符都按下表替换 — 其他看起来像转义符的内容被忽略。其他字符被原样复制到日志行。有些转义符只被会话进程识别,不适用于 postmaster 之类的后台进程。Syslog产生自己的时间戳和进程 ID 信息,所以如果你在使用syslog,可能不想使用那些转义符。这个选项只能在服务器启动时或在postgresql.conf配置文件中设置。
| 转义符 | 效果 | 仅会话 |
|---|---|---|
%u |
用户名 | 是 |
%d |
数据库名 | 是 |
%r |
远程主机名或 IP 地址,以及远程端口 | 是 |
%p |
进程 ID | 否 |
%t |
时间戳 | 否 |
%i |
命令标签:即产生该日志行的命令。 | 是 |
%c |
会话 ID:每个会话的唯一标识符。它是两个由点号分隔的 4 字节十六进制数(不带前导零)。这两个数是会话启动时间和进程 ID,因此它也可以作为打印这些项的一种节省空间的方式。 | 是 |
%l |
每个进程的日志行号,从 1 开始 | 否 |
%s |
会话启动时间戳 | 是 |
%x |
事务 ID | 是 |
%q |
不产生任何输出,但告诉非会话进程在字符串的此处停止。被会话进程忽略。 | 否 |
%% |
字面量% |
否 |
log_statement (string) #控制记录哪些 SQL 语句。有效值是none、ddl、mod和all。ddl记录所有数据定义命令,如CREATE、ALTER和DROP命令。mod记录所有ddl语句,再加上INSERT、UPDATE、DELETE、TRUNCATE和COPY FROM。如果PREPARE和EXPLAIN ANALYZE语句包含的命令属于适当的类型,它们也会被记录。
默认值是none。只有超级用户能更改这个设置。
EXECUTE语句不被视为ddl或mod语句。记录它时,只报告预备语句的名称,而不报告实际的预备语句。
当函数是用PL/pgSQL服务器端语言定义的时候,函数执行的任何查询只在函数于某个特定会话中第一次被调用时才被记录。这是因为PL/pgSQL会为函数中的 SQL 语句所产生的查询计划保留一个缓存。
log_hostname (boolean) #默认情况下,连接日志消息只显示连接主机的 IP 地址。打开这个选项还会记录主机名。注意,取决于你的主机名解析配置,这可能带来不可忽视的性能损失。这个选项只能在服务器启动时或在postgresql.conf文件中设置。
log_statement_stats (boolean)log_parser_stats (boolean)log_planner_stats (boolean)log_executor_stats (boolean)对于每个查询,将各自模块的性能统计输出到服务器日志中。这是一个简单的性能分析工具,类似于Unix getrusage()操作系统功能。 log_statement_stats报告整个语句的统计信息,而其他选项报告每个模块的统计信息。 log_statement_stats不能与任何单独模块选项一起启用。所有这些选项默认情况下都是禁用的。 只有超级用户才能更改这些设置。
stats_start_collector (boolean) #控制服务器是否应启动统计收集子进程。默认是打开的,但如果你确定对收集统计信息不感兴趣,也可以关闭它。这个选项只能在服务器启动时设置。
stats_command_string (boolean) #启用对每个会话当前正在执行的命令以及该命令开始执行时间的统计收集。这个选项默认是关闭的。注意,即使启用了它,这些信息也不是所有用户都可见,只有超级用户和被报告会话的拥有者才能看到;因此它不应构成安全风险。这些数据可以通过pg_stat_activity系统视图访问;更多信息参见第 23 章。
stats_block_level (boolean) #启用对数据库活动的块级统计收集。这个选项默认是关闭的。如果启用了这个选项,所产生的数据可以通过pg_stat和pg_statio系列系统视图访问;更多信息参见第 23 章。
stats_row_level (boolean) #启用对数据库活动的行级统计收集。这个选项默认是关闭的。如果启用了这个选项,所产生的数据可以通过pg_stat和pg_statio系列系统视图访问;更多信息参见第 23 章。
stats_reset_on_server_start (boolean) #如果打开,收集到的统计信息会在服务器每次重启时清零。如果关闭,统计信息将跨服务器重启累积。默认是打开的。这个选项只能在服务器启动时设置。
search_path (string) #这个变量指定当一个对象(表、数据类型、函数等)被用一个无模式限定的简单名称引用时,搜索该对象时的模式顺序。当在不同模式中有同名对象时,将使用第一个在搜索路径中被找到的对象。一个不属于搜索路径中任何一个模式的对象只能通过用限定名(带点号)指定包含它的模式来引用。
search_path的值必须是一个逗号分隔的模式名列表。如果列表项之一是特殊值$user,则具有SESSION_USER返回的名字的模式将取代它(如果有这样一个模式。如果没有,$user会被忽略)。
系统目录模式pg_catalog总是被搜索,不管它是否在搜索路径中被提及。如果它在路径中被提及,那么它将被按照路径指定的顺序搜索。如果pg_catalog不在路径中,则它将在任何路径项之前被搜索。
同样,当前会话的临时表模式 pg_temp_总是被搜索(如果它存在)。可以通过使用别名nnnpg_temp在路径中显式列出它。如果它没有列在路径中,则首先搜索它(甚至在pg_catalog之前)。然而,临时模式仅用于搜索关系(表、视图、序列等)和数据类型名称。它永远不会用于搜索函数或操作符名称。
当对象创建时没有指定一个特定目标模式,它们将被放置在搜索路径中列出的第一个模式中。如果搜索路径为空将报告一个错误。
这个参数的默认值是'"$user", public'(其中第二部分在没有名为public的模式时会被忽略)。这支持共享使用一个数据库(其中没有用户拥有私有模式,所有人都共享使用public)、每用户私有模式以及两者的组合。通过全局或者按用户修改默认搜索路径设置,可以得到其他效果。
搜索路径的当前有效值可以通过SQL函数current_schemas()检查。它和检查search_path的值不太一样,因为current_schemas显示出现在search_path中的项如何被解析。
有关模式处理的更多信息,见第 5.8 节。
default_tablespace (string) #这个变量指定当一个CREATE命令没有显式指定一个表空间时,创建对象(表和索引)的默认表空间。
该值要么是一个表空间的名字,要么是一个指定使用当前数据库默认表空间的空字符串。如果该值和任何现有表空间的名字都不匹配,PostgreSQL将自动使用当前数据库的默认表空间。
有关表空间的更多的信息,请见第 18.6 节。
check_function_bodies (boolean) #这个参数通常为真。当设置为假时,它禁用CREATE FUNCTION期间对函数体字符串的验证。在从转储恢复函数定义时,偶尔禁用验证有助于避免前向引用之类的问题。
default_transaction_isolation (string) #每个 SQL 事务都有一个隔离级别,可以是“读未提交”、“读已提交”、“可重复读”或者“可串行化”。这个参数控制每个新事务的默认隔离级别。默认是“读已提交”。
更多信息请参阅第 12 章和SET TRANSACTION。
default_transaction_read_only (boolean) #一个只读的 SQL 事务不能修改非临时表。这个参数控制每个新事务的默认只读状态。默认是关闭的(读/写)。
更多信息请参考SET TRANSACTION。
statement_timeout (integer) #中止任何使用了超过指定毫秒数的语句,从客户端命令到达服务器时开始计时。 一个零值(默认)将禁用超时。
DateStyle (string) #设置日期和时间值的显示格式,以及解释有歧义的日期输入值的规则。由于历史原因,这个变量包含两个独立的部分:输出格式声明(ISO、Postgres、SQL或German)、输入/输出的年/月/日顺序(DMY、MDY或YMD)。这些可以被独立设置或者一起设置。关键字Euro和European是DMY的同义词;关键字US、NonEuro和NonEuropean是MDY的同义词。详见第 8.5 节。默认值是ISO, MDY。
timezone (string) #设置用于显示和解释时间戳的时区。默认值是'unknown',表示使用系统环境指定的时区。更多信息见第 8.5 节。
australian_timezones (boolean) #如果设置为真,ACST、CST、EST和SAT将被解释为澳大利亚时区,而不是北美/南美时区和星期六。默认是假。
extra_float_digits (integer) #此参数调整浮点值显示的位数,包括float4、float8和几何数据类型。 参数值会加到标准位数(按情况使用FLT_DIG或DBL_DIG)上。 此值最高可以设置为 3,以包含部分有效的数位;这对于转储需要精确还原的浮点数据特别有用。 也可以设置为负数,以抑制不需要的数位。
client_encoding (string) #设置客户端编码(字符集)。默认使用数据库编码。
lc_messages (string) #设置消息显示的语言。可接受的值是系统相关的;详见第 20.1 节。如果这个变量被设置为空字符串(默认),那么该值将以一种系统相关的方式从服务器的执行环境中继承。
在一些系统上,这个区域设置类别并不存在。仍然可以设置这个变量,只是不会有任何效果。同样,所期望语言的翻译消息也可能不存在。在这种情况下,你将仍然继续看到英文消息。
lc_monetary (string) #设置用于格式化货币量的区域设置,例如用to_char函数族。可接受的值是系统相关的;详见第 20.1 节。如果这个变量被设置为空字符串(默认),那么该值将以一种系统相关的方式从服务器的执行环境中继承。
lc_numeric (string) #设置用于格式化数字的区域设置,例如用to_char函数族。可接受的值是系统相关的;详见第 20.1 节。如果这个变量被设置为空字符串(默认),那么该值将以一种系统相关的方式从服务器的执行环境中继承。
lc_time (string) #设置用于格式化日期和时间值的区域设置。(目前,这个设置不做任何事情,但将来可能会。)可接受的值是系统相关的;详见第 20.1 节。如果这个变量被设置为空字符串(默认),那么该值将以一种系统相关的方式从服务器的执行环境中继承。
explain_pretty_print (boolean) #决定EXPLAIN VERBOSE显示详细查询树转储时使用缩进格式还是非缩进格式。默认是打开的。
dynamic_library_path (string) #如果需要打开一个可以动态装载的模块并且在CREATE FUNCTION或LOAD命令中指定的文件名没有目录部分(即名字中不包含斜线),那么系统将搜索这个路径以查找所需的文件。
参数dynamic_library_path的值必须是由冒号(Windows上为分号)分隔的绝对目录路径列表。如果某个列表元素以特殊字符串$libdir开头,则会使用编译时确定的PostgreSQL软件包的库目录来替换$libdir;该目录是标准PostgreSQL发行版所提供模块的安装位置。(使用pg_config --pkglibdir可以找出此目录的名称。)例如:
dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir'
或者,在 Windows 环境中:
dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
这个参数的默认值是'$libdir'。如果该值被设置为一个空字符串,则关闭自动路径搜索。
这个参数可以由超级用户在运行时更改, 但以这种方式进行的设置只会持续到客户端连接结束,因此这种方法应该保留用于开发目的。 推荐设置此参数的方法是在postgresql.conf配置文件中。
deadlock_timeout (integer) #指定在检查是否发生死锁之前等待锁的毫秒数。检查死锁相对昂贵,因此服务器不会每次等待锁时都运行它。 我们乐观地假设在生产应用程序中死锁并不常见,所以在检查死锁之前只是等待一段时间。 增加此值会减少在不必要的死锁检查中浪费的时间,但会减慢实际死锁错误的报告速度。 默认值是 1000 毫秒(一秒),这可能是你在实践中想要的最小值。在负载较重的服务器上,你可能希望提高它。理想情况下,设置应超过你的典型事务时间,以提高在等待者决定检查死锁之前释放锁的几率。
max_locks_per_transaction (integer) #共享锁表的大小是在假设任一时刻最多需要锁定max_locks_per_transaction * max_connections个不同对象的前提下确定的。(因此,这个参数的名字可能会造成误解:它不是任何一个事务所取锁数量的硬性限制,而是一个最大平均值。)只要所有事务的锁都能放入锁表中,单个事务就可以锁住更多对象。被锁住的行数是没有限制的。默认值 64 已经被历史证明是足够的,但是如果你有需要在一个事务中使用很多不同表的查询(例如查询一个有很多子表的父表),你可能需要提高这个值。这个参数只能在服务器启动时设置。
add_missing_from (boolean) #当为真时,查询所引用但尚未出现在FROM子句中的表会被自动加入该子句。为了与PostgreSQL以前版本的兼容性,默认值是true。不过,这一行为不符合 SQL 标准,许多人也不喜欢它,因为它可能掩盖错误(例如本应引用表的别名却引用了表本身)。要获得 SQL 标准的行为(拒绝引用未列在FROM中的表),可把它设置为false。
backslash_quote (string) #这个参数控制字符串字面量中的单引号是否能够用\'来表示。首选的 SQL 标准的方法是将其双写(''),但是PostgreSQL在历史上也接受\'。不过使用\'容易导致安全风险,因为在某些客户端字符集编码中,有多字节字符的最后一个字节在数值上等价于 ASCII 的\。如果客户端代码没有做到正确转义,那么就可能遭到 SQL 注入攻击。如果服务器拒绝看起来带有被反斜线转义的单引号的查询,那么就可以避免这种风险。backslash_quote的可用值是on(总是允许\')、off(总是拒绝)以及safe_encoding(只有客户端编码不允许在多字节字符中存在 ASCII \时允许)。safe_encoding是默认设置。
default_with_oids (boolean) #此参数控制CREATE TABLE和CREATE TABLE AS在既未指定WITH OIDS也未指定WITHOUT OIDS时,是否在新创建的表中包含 OID 列。它也决定SELECT INTO创建的表是否包含 OID。在PostgreSQL 8.0.26 中,default_with_oids默认为true。这也是PostgreSQL以前版本的行为。不过,并不鼓励假定表默认包含 OID。在PostgreSQL的将来版本中,这个选项可能默认为假。
为了便于兼容使用 OID 的应用,这个选项应该保持启用。而为了便于与PostgreSQL的将来版本兼容,这个选项应该禁用,并且需要某些表带有 OID 的应用在创建这些表时应显式指定WITH OIDS。
regex_flavor (string) #正则表达式的“风格”可以设置为 advanced、extended 或 basic。 默认值是 advanced。extended 设置可用于与 PostgreSQL 7.4 之前的版本精确向后兼容。详见 第 9.7.3.1 节。
sql_inheritance (boolean) #这个设置控制继承语义,特别是各种命令默认是否包括子表。在 7.1 之前的版本中它们不被包括。如果你需要旧的行为,可以把这个变量设置为 off,但从长远来看,建议你更改应用,使用ONLY关键字来排除子表。关于继承的更多信息见第 5.5 节。
transform_null_equals (boolean) #当打开时,形如(或expr = NULLNULL = )的表达式将被当做expr,也就是说,如果expr IS NULLexpr计算结果为空值则返回真,否则返回假。正确的 SQL 标准兼容的行为总是返回空值(未知)。因此这个选项默认是关闭的。expr = NULL
不过,在Microsoft Access里的过滤表单生成的查询似乎使用来测试空值,因此,如果你使用这个接口访问数据库,你可能想把这个选项打开。因为expr = NULL形式的表达式总是返回空值(使用 SQL 标准解释),它们不是非常有用并且在普通应用中也不常见,因此这个选项实际上没有什么危害。但是新用户常常对涉及空值的表达式语义感到困惑,因此这个选项默认为关闭。expr = NULL
请注意这个选项只影响= NULL形式,而不影响其它比较操作符或者其它与一些涉及等值操作符的表达式在计算上等效的其他表达式(例如IN)。因此,这个选项不能普遍修复错误的程序写法。
相关信息请见第 9.2 节。
下列“参数”是只读的,在编译或安装 PostgreSQL 时确定。 因此,它们未列入示例 postgresql.conf 文件。 这些选项报告 PostgreSQL 行为的各个方面,某些应用(特别是管理前端)可能对此感兴趣。
block_size (integer) #报告一个磁盘块的大小。它由编译服务器时BLCKSZ的值确定。默认值是 8192 字节。有些配置变量的含义(例如shared_buffers)会被block_size影响。详见第 16.4.3 节。
integer_datetimes (boolean) #报告PostgreSQL是否在编译时启用了对 64 位整数日期和时间的支持。构建PostgreSQL时配置--enable-integer-datetimes可以启用它。默认值是off。
lc_collate (string) #报告对文本数据进行排序所使用的区域设置。更多信息参见第 20.1 节。 该值在数据库集簇初始化时确定。
lc_ctype (string) #报告决定字符分类的区域设置。更多信息参见第 20.1 节。 该值在数据库集簇初始化时确定。通常它与lc_collate相同,但特殊应用可能将它设置为不同的值。
max_function_args (integer) #报告函数参数的最大数量。它由编译服务器时的FUNC_MAX_ARGS值决定。默认值是 100 个参数。
max_identifier_length (integer) #报告标识符的最大长度。它由编译服务器时的NAMEDATALEN值减一决定。NAMEDATALEN的默认值是 64;因此max_identifier_length的默认值是 63 字节,在使用多字节编码时,这可能不足 63 个字符。
max_index_keys (integer) #报告索引键的最大数目。它由编译服务器时的INDEX_MAX_KEYS值决定。默认值是 32 个键。
server_encoding (string) #报告数据库的编码(字符集)。这是在数据库被创建时决定的。通常,客户端只需要关心client_encoding的值。
server_version (string) #报告服务器的版本号。它是由编译服务器时的PG_VERSION值决定的。
这个特性允许附加模块(例如过程语言)向PostgreSQL添加系统通常不认识的参数。这样便能以标准方式配置扩展模块。
custom_variable_classes (string) #这个变量以逗号分隔列表的形式指定用于自定义变量的一个或多个类名。自定义变量是一个PostgreSQL本身通常不知道、但被某个附加模块使用的变量。这种变量的名称必须由一个类名、一个点号和一个变量名组成。custom_variable_classes指定一个特定安装中使用的所有类名。此参数只能在postgresql.conf文件中或在服务器命令行上设置。
在postgresql.conf中设置自定义变量的困难在于,该文件必须在附加模块被载入之前读取,因此自定义变量通常会被当作未知变量而拒绝。当设置了custom_variable_classes时,服务器将接受每个指定类中任意变量的定义。这些变量会被当作占位符,在定义它们的模块被载入之前没有任何功能。当一个特定类的模块被载入时,它会为其类名加入正确的变量定义,根据那些定义转换任何占位符值,并对该类中剩下的任何无法识别的占位符发出警告。
下面是一个在使用自定义变量时postgresql.conf可能包含内容的例子:
custom_variable_classes = 'plpgsql,plperl' plpgsql.variable_conflict = use_variable plperl.use_strict = true plruby.use_strict = true # generates error: unknown class name
下列参数用于PostgreSQL源代码的开发工作,在某些情况下也用于辅助恢复严重损坏的数据库。 没有理由在生产数据库中使用它们。因此,它们被排除在示例postgresql.conf文件之外。 请注意,许多参数需要特殊的源代码编译标志才能起作用。
debug_assertions (boolean) #打开各种断言检查。这是一种调试辅助手段。如果你遇到了奇怪的问题或崩溃,可以打开它,因为它可能暴露出编程错误。要使用这个参数,在构建PostgreSQL时必须定义宏USE_ASSERT_CHECKING(通过configure选项--enable-cassert完成)。注意,如果PostgreSQL构建时启用了断言,debug_assertions默认是打开的。
debug_shared_buffers (integer) #缓冲区空闲列表报告之间的秒数。如果设置为大于零,则每隔这么多秒向日志输出一次空闲列表统计信息。零(默认值)禁用报告。
pre_auth_delay (integer) #如果非零,则在新服务器进程刚刚派生之后、执行认证过程之前,延迟指定的秒数。 这旨在给开发者一个机会,用调试器附加到服务器进程上,跟踪认证过程中的异常行为。
trace_notify (boolean) #为LISTEN和NOTIFY命令生成大量调试输出。client_min_messages或log_min_messages必须是DEBUG1或者更低才能把这种输出分别发送到客户端或者服务器日志。
trace_locks (boolean)trace_lwlocks (boolean)trace_userlocks (boolean)trace_lock_oidmin (boolean)trace_lock_table (boolean)debug_deadlocks (boolean)log_btree_build_stats (boolean)其他各种代码跟踪和调试选项。
wal_debug (boolean) #打开时,输出与 WAL 相关的调试信息。只有在编译 PostgreSQL 时定义了 WAL_DEBUG 宏,该参数才可用。
zero_damaged_pages (boolean) #检测到一个损坏的页面头通常会导致PostgreSQL报告一个错误并中止当前命令。把zero_damaged_pages设置为真会让系统改为报告一个警告,把损坏的页面清零,然后继续处理。这种行为将破坏数据,即损坏页面上的所有行。但它允许你越过错误,从表中可能存在的任何未损坏页面中检索行。因此,如果由于硬件或软件错误发生了损坏,它对于恢复数据是有用的。一般来说,只有在你对从表的损坏页面中恢复数据已经不抱希望之后,才应该打开它。默认设置是关闭的,并且只有超级用户能更改它。
为了方便起见,系统中还为一些参数提供了单字母的命令行选项开关。它们在表 16.1中描述。
表 16.1. 短选项键
| 短选项 | 等效于 |
|---|---|
-B |
shared_buffers = |
-d |
log_min_messages = DEBUG |
-F |
fsync = off |
-h |
listen_addresses = |
-i |
listen_addresses = '*' |
-k |
unix_socket_directory = |
-l |
ssl = on |
-N |
max_connections = |
-p |
port = |
-fi, -fh, -fm, -fn, -fs, -ft[a] |
enable_indexscan = off, enable_hashjoin = off, enable_mergejoin = off, enable_nestloop = off, enable_seqscan = off, enable_tidscan = off |
-s[a] |
log_statement_stats = on |
-S [a] |
work_mem = |
-tpa, -tpl, -te[a] |
log_parser_stats = on, log_planner_stats = on, log_executor_stats = on |
|
[a] 由于历史原因,这些选项必须通过
$
或者像上面说明的那样,从客户端通过 |
|
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。