服务器配置
1 设置参数
1.1 参数名称和值
全部参数名都是大小写不敏感的。每一个参数均可以接受五种类型之一的值: 布尔、字符串、整数、 浮点数或枚举。
布尔: 值能够被写成 on, off, true, false, yes, no, 1, 0 (都是大小写不敏感的)
字符串: 一般值被包括在单引号内,值内部的任何单引号都须要被双写。
数字(整数和浮点): 只对浮点参数容许一个小数点。不要使用千位分隔符。不要求引号。
带单位的数字: 一些数字参数具备隐含单位,由于它们描述内存或时间量。单位多是千
字节、块(一般是 8KB)、 毫秒、秒或分钟。
默认单位能够通 过引用pg_settings.unit来找到,例如时间值能够是’120 ms’
可用的内存单位是kB(千字节)、MB(兆字节)和GB(吉字节)。内存单位的乘数是1024 而不是 1000。
可用的时间单位是ms(毫秒)、s(秒)、min(分钟)、 h(小时)和d(天)
枚举: 枚举类型的参数以与字符串参数相同的方式指定,但被限制到一组有限的值。
1.2 经过配置文件影响参数
设置这些参数最基本的方法是编辑postgresql.conf文件
# This is a comment
log_connections = yes
log_destination = ’syslog’
search_path = ’"$user", public’
shared_buffers = 128MB
每一行指定一个参数。名称和值之间的等号是可选的。空白没有意义
除postgresql.conf以外,PostgreSQL 数据目录还包含一个文件 postgresql.auto.conf,
它具备和postgresql.conf相同的格式可是不该该被手工编辑。这个 文件保存了通
过ALTER SYSTEM命令提供的设置。每当postgresql.conf被读 取时这个文件会被自
动读取,而且它的设置会以一样的方式生效。 postgresql.auto.conf中的设置会覆
盖postgresql.conf 中的设置。
1.3 经过SQL影响参数
ALTER SYSTEM命令
ALTER DATABASE命令容许针对一个数据库覆盖其全局设置
ALTER ROLE命令容许用用户指定的值来覆盖全局设置和数据库设置
SHOW命令容许察看全部参数的当前值。
SET命令容许修改对于一个会话能够本地设置的参数的当前值, 它对其余会话没有影响。
此外,系统视图pg_settings能够被用来查看和改变 会话本地的值
SET configuration_parameter TO DEFAULT;
等效于:
UPDATE pg_settings SET setting = reset_val WHERE name = ’configuration_parameter’;
1.4 经过Shell 影响参数
在服务器启动期间,能够经过-c命令行参数把参数设置传递给 postgres命令。
postgres -c log_connections=yes -c log_destination='syslog'这种方式提供的设置会覆盖经过postgresql.conf
1.5 管理配置文件内容
除了单个参数设置,postgresql.conf文件能够包含包括指令,它指定要读入和处理的另外一
个文件,
include ’filename’
include_dir ’directory’
include ’shared.conf’
include ’memory.conf’
include ’server.conf’
2. 文件位置
PostgreSQL还使用另外两个手工编辑的配置文件,它们控制客户端认证。默认状况下,全部三个配置文件
都存放在数据库集簇的数据目录中。
data_directory (string)指定用于数据存储的目录。这个选项只能在服务器启动时设置
config_file (string) 指定主服务器配置文件(一般叫postgresql.conf)。
hba_file (string)指定基于主机认证配置文件(一般叫pg_hba.conf)。 这个参数只能在服务器启动的时候设置。
ident_file (string)用户名称映射的配置文件(一般叫pg_ident.conf)
external_pid_file (string)指定可被服务器建立的用于管理程序的额外进程 ID(PID)文件。
3. 链接和认证
listen_addresses (string)指定服务器在哪些 TCP/IP 地址上监听客户端链接。值的形式是一个逗号分隔的主机名
和/或数字 IP 地址列表。特殊项*对应全部可用 IP 接口。项0.0.0.0容许监听全部 IPv4
地址而且::容许监听全部 IPv6 地址。若是列表为空,服务器将根本不会监放任何 IP 接
口,在这种状况中只能使用 Unix 域套接字来链接它。默认值是localhost,它只容许创建
本地 TCP/IP “环回”链接。--这个参数只能在服务器启动时设置
port (integer)服务器监听的 TCP 端口;默认是 5432 。请注意服务器会同一个端口号监听全部的 IP 地址。这个参数只能在服务器启动时设置。
max_connections (integer) 决定数据库的最大并发链接数。默认值一般是 100 个链接,启动时设置
superuser_reserved_connections (integer) 决 定 为PostgreSQL超 级 用 户 连 接 而 保 留 的 连 接“槽”数 。同时活跃的并发链接最多max_connections个。
默认值是 3 。这个值必须小于max_connections的值。,启动时设置
unix_socket_directories (string)指定服务器用于监听来自客户端应用的链接的 Unix 域套接字目录。逗号分隔多个套接字
Windows下没有 Unix 域套接字,所以这个参数与 Windows 无关。
unix_socket_group (string)设置 Unix 域套接字的所属组(套接字的所属用户老是启动服务器的用户)。
unix_socket_permissions (integer)设置 Unix 域套接字的访问权限。Unix 域套接字使用普通的 Unix 文件系统权限集。
默认的权限是0777,意思是任何人均可以链接。合理的候选是0770(只有用户和同组
的人能够访问, 又见unix_socket_group)和0700(只有用户本身能够访问)启动时设置。
bonjour (boolean)经过Bonjour广告服务器的存在。默认值是关闭。 这个参数只能在服务器启动时设置
bonjour_name (string)指定Bonjour服务名称。空字符串”(默认值)表示使用计算机名。
tcp_keepalives_idle (integer)
指定不活动多少秒以后经过 TCP 向客户端发送一个 keepalive 消息。 0 值表示使用默认
值。这个参数只有在支持TCP_KEEPIDLE或TCP_KEEPALIVE符号的系统或 Windows 上才可使用。在其余系统上,它必须为零。
tcp_keepalives_interval (integer) 指定在多少秒以后重发一个尚未被客户端告知已收到的 TCP keepalive 消息。0 值表示
使用系统默认值。
tcp_keepalives_count (integer)指定与客户端的服务器链接被认为死掉以前容许丢失的 TCP keepalive 数量。0 值表示
使用系统默认值。
3.2 安全和认证
authentication_timeout (integer)完成客户端认证的最长时间,以秒计。若是一个客户端没有在这段时间里完成 认证协
议,服务器将关闭链接。默认值是 1分钟(1m)。参数只能在服务器命令行上或者在postgresql.conf文件中设置。
ssl (boolean) 启用SSL链接。默认是off,SSL通讯只能和 TCP/IP 链接一块儿使用。
ssl_ca_file (string)指定包含 SSL 服务器证书颁发机构(CA)的文件名。默认值为空,表示不载入 CA 文件,而且不执行客户端证书验证
ssl_cert_file (string)指定包含 SSL 服务器证书的文件名。默认值是server.crt。
ssl_crl_file (string)指定包含 SSL 服务器证书撤销列表(CRL)的文件名。默认值为空
ssl_key_file (string)指定包含 SSL 服务器私钥的文件名。默认值为server.key。
ssl_ciphers (string)指定一个SSL密码列表,用于安全链接。
默认值的解释:
HIGH使用来自HIGH组的密码的密码组(例如 AES, Camellia, 3DES)
MEDIUM使用来自MEDIUM组的密码的密码组(例如 RC4, SEED)
+3DESOpenSSL 对HIGH的默认排序是有问题的,由于它认为 3DES 比 AES128 更高。这是
错误的,由于 3DES 提供的安全性比 AES128 低,而且它也更加慢。 +3DES把它重
新排序在全部其余HIGH和 MEDIUM密码以后。
!aNULL禁用不作认证的匿名密码组。这类密码组容易收到中间人攻击,所以不该被使用。
ssl_prefer_server_ciphers (bool)
指定是否使用服务器的 SSL 密码首选项,而不是用客户端的。默认为真
ssl_ecdh_curve (string)
指定用在ECDH密钥交换中的曲线名称。它须要被全部链接的客户端支持。
password_encryption (boolean)当 在CREATE USER或ALTER ROLE中指定了一个密码而没有写ENCRYPTED或UNENCRYPTED时,
这个参数决定是否密码会被加密。默认值是on(加密密码)。
krb_server_keyfile (string)设 置 Kerberos 服 务 器 密 钥 文 件 的 位 置 。
krb_caseins_users (boolean)设置 Kerberos 和 GSSAPI 用户名是否应区分大小写。默认是off(区分大小写)。
db_user_namespace (boolean)容许针对每一个数据库的用户名。默认是关闭的。
若是打开这个参数,你应该以username@dbname的方式建立用户。
打开这个参数以后,你仍是可以建立普通的全局用户。只要在客户端指定用户名时附加
一个@,例如joe@。 在服务器查找这个用户名以前,这个@会被剥除。
4. 资源消耗
4.1. 内存
shared_buffers (integer)设置数据库服务器将使用的共享内存缓冲区量。默认一般是 128 兆字节(128MB)
若是有一个专用的 1GB 或更多内存的数据库服务器, 一个合理的shared_buffers开
始值是系统内存的 25%。 即便很大的shared_buffers有效, 也会形成一些工做负
载, 但由于PostgreSQL一样依赖操做系统的高速缓冲区, 将shared_buffers设置为
超过 40% 的RAM不太可能比一个小点值工做得更好。
shared_buffers更大的 设置一般要求对max_wal_size也作相应增长。
huge_pages (enum)启用/禁用巨型内存页面的使用。可用的值是 try(默认)、on、 和off。
当huge_pages被设置为try时,服务器将 尝试使用巨型页面,若是失败则会转回去使用
正常的分配。若是设置为 on,使用巨型页面失败会阻止服务器启动。若是设置为 off,
则不会使用巨型页面。
temp_buffers (integer)设置每一个数据库会话使用的临时缓冲区的最大数目。这些都是会话的本地缓冲区,只用
于访问临时表。默认是 8 兆字节(8MB)。
max_prepared_transactions (integer)设置能够同时处于“prepared”状态的事务的最大数目把这个参数设置 为零(这是默认设置)将禁用预备事务特性。
若是你不打算使用预备事务,能够把这个参数设置为零来防止意外建立预备事务。
work_mem (integer)指定在写到临时磁盘文件以前被内部排序操做和哈希表使用的内存量。该值默认为四兆字节(4MB)。
注意对于一个复杂查询, 可能会并行运行好几个排序或者哈希操
做;每一个操做都会被容许使用这个参数指定的内存量,而后才会开始写数据到临时文
件。一样,几个正在运行的会话可能并发进行这样的操做。所以被使用的总内存可能
是work_mem值的好几倍,在选择这个值时必定要记住这一点。ORDER BY、DISTINCT和
归并链接都要用到排序操做。哈希链接、基于哈希的汇集以及基于哈希的IN子查询处理
中都要用到哈希表。
maintenance_work_mem (integer)指定在维护性操做(例如VACUUM、CREATE INDEX和ALTER TABLE ADD FOREIGN KEY)
中使用的 最大的内存量。其默认值是 64 兆字节(64MB)。由于在一个数据库会话中,
一个时刻只有一个这样的操做能够被执行,而且一个数据库安装一般不会有太多这样的
操做并发执行, 把这个数值设置得比work_mem大不少是安全的。 更大的设置能够改进
清理和恢复数据库转储的性能。
注意当自动清理运行时,可能会分配这个内存的autovacuum_max_workers倍,所以要小
心不要把该默认值设置得过高。
autovacuum_work_mem (integer)指定每一个自动清理工做者进程能使用的最大内存量。其默认值为 -1
max_stack_depth (integer)指定服务器的执行堆栈的最大安全深度。
dynamic_shared_memory_type (enum)指定服务器应该使用的动态共享内存实现。
4.2. 磁盘
temp_file_limit (integer)指定一个会话能用于临时文件(如排序和哈希临时文件,或者用于保持游标的存储文
件)的最大磁盘空间量。一个试图超过这个限制的事务将被取消。这个值以千字节计,
而且-1(默认值)意味着没有限制。
4.3. 内核资源使用
max_files_per_process (integer)设置每一个服务器子进程容许同时打开的最大文件数目。默认是 1000 个文件。
若是你发现本身看到了“Too many open files”这样的失败,可尝试减少这个设置。
4.4. 基于代价的清理延迟
vacuum_cost_delay (integer)进程超过代价限制后将休眠的时间长度,以毫秒计。其默认值为0,这将禁用基于代价的清理延迟特性。
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。
4.5. 后台写入器
有一个独立的服务器进程,叫作后台写入器,它的功能就是发出写“脏”(新的或修改过的)共享缓冲区的命令。
bgwriter_delay (integer)指定后台写入器活动轮次之间的延迟。默认值是 200 毫秒(200ms)
bgwriter_lru_maxpages (integer)在每一个轮次中,不超过这么多个缓冲区将被后台写入器写出。默认值是 100个缓冲区。
bgwriter_lru_multiplier (floating point)
每一轮次要写的脏缓冲区的数目基于最近几个轮次中服务器进程须要的新缓冲区的数目。默认值是 2.0
4.6. 异步行为
effective_io_concurrency (integer)
设置PostgreSQL能够同时被执行的并发磁盘 I/O 操做的数量。调高这个值,能够增长任
何单个PostgreSQL会话试图并行发起的 I/O 操做的数目。 容许的范围是 1 到 1000,或 0
表示禁用异步 I/O 请求。当前这个设置仅影响位图堆扫描。
max_worker_processes (integer)设置系统可以支持的后台进程的最大数量。
5. 预写式日志
5.1. 设置
wal_level (enum)决定多少信息写入到 WAL 中。默认值是minimal, 只写入从崩溃或当即关机恢复所须要的信息。
archive添加 WAL 归档所须要的日志。hot_standby则进一步增长在一个后备服务器上运行只读查询所需的信息。 最后,
logical会增长支持逻辑解码所需的信息。
在minimal级别中,某些批量操做的 WAL 日志能够被安全地跳过,这可使那些操做更快
CREATE TABLE AS
CREATE INDEX
CLUSTER
COPY到在同一个事务中被建立或截断的表中
所以,要启用 WAL 归档(archive_mode)和流复制,必须使用archive或更高级别。
fsync (boolean)若是打开这个参数,PostgreSQL服务器将尝试确保更新被物理地写入到磁盘,
这保证了数据库集簇在一次操做系统或者硬件崩溃后能恢复到一个一致的状态。
虽然关闭fsync经常能够获得性能上的收益,但当发生断电或系统崩溃时可能形成不可恢复的数据损坏。
synchronous_commit (enum)指定在命令返回“success”指示给客户端以前,一个事务是否须要等待 WAL 记录被写入
磁盘。合法的值是on、remote_write、local和off。默认的而且安全的设置是on。
不一样于fsync,将这个参数设置为off不会产生数据库不一致性的风险:一个操做系统或数据库崩溃可能会形成一些最近听说已提
交的事务丢失,但数据库状态是一致的,就像这些事务已经被干净地停止。
当使用同步复制时,它将对等待本地刷写磁盘和 WAL 记录复制很敏感,或者
对容许事务异步提交很敏感。不过,设置local能够用于但愿等待本地刷写磁
盘 但 不 等 待 同 步 复 制 的 事 务 。 如 果 没 有 设 置synchronous_standby_names, 设
置on、remote_write和local都提供了一样的同步级别:事务提交只等待本地刷写磁
盘。这个参数能够随时被修改;任何一个事务的行为由其提交时生效的设置决定。
例如,当默认是相反时,实现一个单一
多语句事务的异步提交,在事务中发出SET LOCAL synchronous_commit TO OFF。
wal_sync_method (enum)用来向强制 WAL 更新到磁盘的方法。若是fsync是关闭的,那么这个设置就不相关,因
为 WAL 文件更新将根本不会被强制。
open_* 选项也可使用O_DIRECT(若是可用)。
full_page_writes (boolean)当这个参数为打开时,PostgreSQL服务器在一个检查点以后的页面的第一次修改期间将
每一个页面的所有内容写到 WAL 中。
关闭这个选项并不影响用于时间点恢复(PITR)的 WAL 归档使用
wal_log_hints (boolean)当这个参数为on时,PostgreSQL服务器一个检查点以后页面被第一次修改期间把该磁盘
页面的整个内容都写入 WAL,即便对所谓的提示位作非关键修改也会这样作。默认值是off。
wal_compression (boolean)
这个参数为on, full_page_writes为on,或者基础备份中, PostgreSQL服务器压缩完整
页面图片到WAL中。 在WAL回放中解压压缩的页面图片。缺省值为off。
wal_buffers (integer)用于还未写入磁盘的 WAL 数据的共享内存量。默认值 -1 选择等于shared_buffers的 1/32
的尺寸(大约3%)
在每次事务提交时,WAL 缓冲区的内容被写出到磁盘
wal_writer_delay (integer)指定 WAL 写入器的活动轮次之间的延迟。在每一个轮次中写入器会将 WAL 刷到磁盘。
以后,休眠wal_writer_delay毫秒,而后重复。默认值是 200 毫秒(200ms)。
commit_delay (integer)在一次 WAL 刷写被发起以前,commit_delay增长一个时间延迟,以微妙计。
commit_siblings (integer)在执行commit_delay延迟时,要求的并发活动事务的最小数目。
5.2. 检查点
checkpoint_timeout (integer)
自动 WAL 检查点之间的最长时间,以秒计。 有效值在30秒和1小时之间。 默认是5 分钟(5min)。
增长这个参数的值会增长崩溃恢复所需的时间。
checkpoint_completion_target (floating point)
指定检查点完成的目标,做为检查点之间总时间的一部分。默认是 0.5。
checkpoint_warning (integer)
若是因为填充检查点段文件致使的检查点之间的间隔低于这个参数表示的秒数,默认值是 30 秒(30s)。零则关闭警告。
max_wal_size (integer)在自动WAL检查点使得WAL增加到最大尺寸。这是软限制;特殊状况下WAL大
小 可 以 超 过 max_wal_size, 如 重 负 载 下 , 错 误archive_command, 或 者 较
大wal_keep_segments的设置。缺省是1GB。
min_wal_size (integer)只要WAL磁盘使用率低于这个设置,旧的WAL文件总数被回收,以供未来检查点使用。缺省是80MB
5.3. 归档
archive_mode (enum)当启用archive_mode时, 能够经过设置archive_command命令将完成的 WAL段发送到
归档存储。 除了off,要禁用两种模式on和 always。
archive_command (string)本地 shell 命令被执行来归档一个完成的 WAL 文件段。字符串中的任何%p被替换成要被
归档的文件的路径名,而%f只被文件名替换
archive_timeout (integer)强制服务器来周期性地切换到一个新的 WAL 段文件。
6. 复制
6.1. 发送服务器
max_wal_senders (integer)定来自后备服务器或流式基础备份客户端的并发链接的最大数量(即同时运行 WAL
发送进程 的最大数)。默认值是零,它意味着禁用复制。WAL 发送进程被计算在链接
总数内,所以该参数 不能被设置为高于max_connections的值。
max_replication_slots (integer)指定服务器能够支持的复制槽最大数量。默认值为零。
要容许使用复制槽, wal_level必须被设置为archive或 更高。
wal_keep_segments (integer)指定在后备服务器须要为流复制获取日志段文件的状况下,pg_xlog目录下所能保留的
过去日志文件段的最小数目。
wal_sender_timeout (integer)中断那些中止活动超过指定毫秒数的复制链接。默认值是 60 秒。
track_commit_timestamp (bool)记录事务提交时间。缺省值是off。
6.2. 主服务器
synchronous_standby_names (string)指定一个由逗号分隔的后备机名称列表,这些后备机可以支持同步复制
在任何一个时刻,只能有最多一个活动的同步后备机;等待提交的事务只有在后备服务器确认收到了它们的数据以后才被容许继续。
vacuum_defer_cleanup_age (integer)默认值是零个事务,表示死亡行版本将被尽量快地清除
6.3. 后备服务器
这些设置空值接收复制数据的一个后备服务器的行为。它们的值与主服务器无关。
hot_standby (boolean)指定在恢复期间,你是否可以链接并运行查询。默认值是off。
它只在归档恢复期间或后备机模式下才有效。
max_standby_archive_delay (integer)当热后备机处于活动状态时,这个参数决定取消那些与即将应用的 WAL 项冲突的后备
机查询以前,后备服务器应该等待多久。当 WAL 数据被从 WAL归档(而且所以不是当前的 WAL)时,max_standby_archive_delay能够应用。默认
值是 30 秒。若是没有指定,衡量单位是毫秒。值 -1 容许后备机一直等到冲突查询结束。
max_standby_streaming_delay (integer)当热后备机处于活动状态时,这个参数决定取消那些与即将应用的 WAL 项冲突的后
备机查询以前,后备服务器应该等待多久
wal_receiver_status_interval (integer)指定在后备机上的 WAL 接收者进程向主服务器或上游后备机发送有关复制进度的信息
的最小频度,默认值是 10 秒
hot_standby_feedback (boolean)指定一个热后备机是否将会向主服务器或上游后备机发送有关于后备机上当前正被
执行的查询的反馈。
wal_receiver_timeout (integer)停止处于非活动状态超过指定毫秒数的复制连接。默认值是 60 秒。
wal_retrieve_retry_interval (integer)指定等待服务器应等待多长时间时,缺省值是5秒。若是没有指定,单位是毫秒。
7. 查询规划
7.1. 规划器方法配制
这些配置参数提供了影响查询优化器选择查询规划的原始方法。若是优化器 为特定的查询选
择的缺省规划并非最优,那么咱们就能够经过使用这些 配置参数强制优化器选择一个更好
的规划来temporary解决这个 问题。
若是优化器为一个特定查询选择的默认计划不是最优的,一种临时解决方案是使用这些配置参数之一来强制优化
器选择一个不一样的计划。提升优化器选择的计划质量的更好的方式包括调整规划器的代价常
数、手工运行ANALYZE、增长default_statistics_target配置参数的值以及使
用ALTER TABLE SET STATISTICS增长为特定列收集的统计信息量。
enable_bitmapscan (boolean)
容许或禁止查询规划器使用位图扫描计划类型。默认值是on。
enable_hashagg (boolean)
容许或禁用查询规划器使用哈希汇集计划类型。默认值是on。
enable_hashjoin (boolean)
容许或禁止查询规划器使用哈希链接计划类型。默认值是on。
enable_indexscan (boolean)
容许或禁止查询规划器使用索引扫描计划类型。默认值是on。
enable_indexonlyscan (boolean)
容许或禁止查询规划器使用只用索引扫描计划类型。默认值是on。
enable_material (boolean)
容许或者禁止查询规划器使用物化。它不可能彻底禁用物化,可是关闭这个变量将阻止
规划器插入物化节点,除非为了保证正确性。默认值是on。
enable_mergejoin (boolean)
容许或禁止查询规划器使用归并链接计划类型。默认值是on。
enable_nestloop (boolean)
容许或禁止查询规划器使用嵌套循环链接计划。它不可能彻底禁止嵌套循环链接,可是
关闭这个变量将使得规划器尽量优先使用其余方法。默认值是on。
enable_seqscan (boolean)
容许或禁止查询规划器使用顺序扫描计划类型。它不可能彻底禁止顺序扫描,可是关闭
这个变量将使得规划器尽量优先使用其余方法。默认值是on。
enable_sort (boolean)
容许或禁止查询规划器使用显式排序步骤。它不可能彻底禁止显式排序,可是关闭这个
变量将使得规划器尽量优先使用其余方法。默认值是on。
enable_tidscan (boolean)
容许或禁止查询规划器使用TID扫描计划类型。默认值是on。
7.2. 规划器代价常量
seq_page_cost (floating point)
设置规划器计算一次顺序磁盘页面抓取的开销。默认值是1.0。
random_page_cost (floating point)
设置规划器对一次非顺序获取磁盘页面的代价估计。默认值是 4.0。经过把表和索引
放在一个特殊的表空间(要设置该表空间的同名参数)中能够覆盖这个值
减小这个值(相对于seq_page_cost)将致使系统更倾向于索引扫描;提升它将让索引
扫描看起来相对更昂贵。
如 果 你 相 信 90% 的 缓 冲 率 对 你 的 负 载 是 一 个 不 正 确 的 假 设 , 你 可 以 增 加
random_page_cost 来更好的反映随机存储读取的真正代价。相应地,若是你的数据能够
彻底放在高速缓存中(例如当数据库小于服务器总内存时),下降 random_page_cost
多是合适的。
提示: 虽然容许你将random_page_cost设置的比 seq_page_cost小,可是物理上的实际状况
并不受此影响。 然而当全部数据库都位于内存中时,二者设置为相等是很是合理的,由于
在此状况下,乱序抓取并不比顺序抓取开销更大。
cpu_tuple_cost (floating point)
设置规划器对一次查询中处理每一行的代价估计。默认值是 0.01。
cpu_index_tuple_cost (floating point)
设置规划器对一次索引扫描中处理每个索引项的代价估计。默认值是 0.005。
cpu_operator_cost (floating point)
设置规划器对于一次查询中处理每一个操做符或函数的代价估计。默认值是 0.0025。
effective_cache_size (integer)
设置规划器对一个单一查询可用的有效磁盘缓冲区尺寸的假设。
7.3. 遗传查询优化
GEQO是一个使用探索式搜索来执行查询规划的算法。它能够下降负载查询的规划时间。 同
时,GEQO的检索是随机的,所以它的规划可能会不可肯定。
geqo (boolean)允 许 或 禁 止 遗 传 查 询 优 化 。 默 认 是 启 用 。 在 生 产 环 境 中 通 常 最 好 不 要 关 闭
它。geqo_threshold变量提供了对 GEQO 更细粒度的空值。
geqo_threshold (integer)
只有当涉及的FROM项数量至少有这么多个的时候,才使用遗传查询优化(注意一个FULL
OUTER JOIN只被计为一个FROM项)。默认值是 12。
geqo_effort (integer)
控制 GEQO 里规划时间和查询规划的有效性之间的平衡。这个变量必须是 一个范围从 1到 10 的整数。缺省值是 5 。
geqo_pool_size (integer)
控制 GEQO 使用的池尺寸,它就是遗传种群中的个体数目。它必须至少为 2,且有用的
值一般在 100 到 1000 之间。
geqo_generations (integer)
控制 GEQO 使用的子代数目。子代的意思是算法的迭代次数。它必须至少 是 1 ,有用
的值范围和池大小相同。
geqo_selection_bias (floating point)
控制 GEQO 使用的选择偏好。选择偏好是种群中的选择压力。值能够是 1.5 到 2.0 之
间,后者是默认值。
geqo_seed (floating point)
控制 GEQO 使用的随机数生成器的初始值,随机数生成器用于在链接顺序搜索空间中选
择随机路径。该值能够从 0 (默认值)到 1。
7.4. 其余规划器选项
default_statistics_target (integer)
为没有经过ALTER TABLE SET STATISTICS设置列相关目标的表列设置默认统计目标。默认值是100.
constraint_exclusion (enum)
constraint_exclusion的容许值是on(对全部表检查约束)、off(从不检查约束)
和partition(只对继承的子表和UNION ALL子查询检查约束)。partition是默认设
置。它一般被用于继承和分区表来提升性能。
当对一个特定表容许这个参数,规划器比较查询条件和表的CHECK约束,而且忽略那些
条件违反约束的表扫描。例如:
CREATE TABLE parent(key integer, ...);
CREATE TABLE child1000(check (key between 1000 and 1999)) INHERITS(parent);
CREATE TABLE child2000(check (key between 2000 and 2999)) INHERITS(parent);
SELECT * FROM parent WHERE key = 2400;
在启用约束排除时,这个SELECT将彻底不会扫描child1000,从而提升性能。
目前,约束排除只在用来实现表分区的状况中被默认启用。为全部表启用它会增长额外
的规划开销,特别是在简单查询上而且不会产生任何好处。若是没有分区表时,最好是
彻底关闭它。
cursor_tuple_fraction (floating point)
设置规划器对将被检索的一个游标的行的比例的估计。默认值是 0.1。
from_collapse_limit (integer)
若是生成的FROM列表不超过这么多项,规划器将把子查询融合到上层查询。
join_collapse_limit (integer)
若是得出的列表中不超过这么多项,那么规划器将把显式JOIN(除了FULL JOIN)结构
重写到 FROM项列表中。较小的值可减小规划时间,可是可能会生成差些的查询计划。
默认状况下,这个变量被设置成和from_collapse_limit相同, 这样适合大多数使
用。把它设置为 1 可避免任何显式JOIN的重排序。所以查询中指定的显式链接顺序就是
关系被链接的实际顺序。
8. 错误报告和日志
8.1. 在哪里作日志
log_destination (string)
PostgreSQL支持多种方法来记录服务器消息,包括stderr、csvlog和syslog。在 Windows上还支持eventlog。
默认值是只记录到stderr。
若是csvlog被包括在log_destination中,日志项会以“逗号分隔值” (CSV)格式被输
出,这样能够很方便地把日志载入到程序中。
logging_collector (boolean)这个参数启用日志收集器,它是一个捕捉被发送到stderr的日志消息的后台进程,而且
它会将这些消息重定向到日志文件中。
log_directory (string)当logging_collector被启用时,这个参数决定日志文件将被在哪一个目录下建立。它可
以被指定为一个绝对路径,也能够被指定为一个相对于集簇数据目录的相对路径。默认是pg_log
log_filename (string)当logging_collector被启用时,这个参数设置被建立的日志文件的文件名。该值被视
为一种strftime模式,默认是postgresql-%Y-%m-%d_%H%M%S.log。
log_file_mode (integer)
在 Unix 系统上,当logging_collector被启用时,这个参数设置日志文件的权限
默认的权限是0600,表示只有服务器拥有者才能读取或写入日志文件。其余经常使用的设置
是0640,它容许拥有者的组成员读取文件。
log_rotation_age (integer)当logging_collector被启用时,这个参数决定一个个体日志文件的最长生命期。当这
些分钟过去后,一个新的日志文件将被建立。
log_rotation_size (integer)当logging_collector被启用时,这个参数决定一个个体日志文件的最大尺寸。当这么
多千字节被发送到一个日志文件后,将建立一个新的日志文件。
log_truncate_on_rotation (boolean)
当logging_collector被 启 用 时 , 这 个 参 数 将 导 致PostgreSQL截 断 ( 覆 盖 而
不是追加)任何已有的同名日志文件。不过,截断只在一个新文件因为基于时
间的轮转被打开时发生,在服务器启动或基于尺寸的轮转时不会发生。若是被
关闭,在全部状况下之前存在的文件将被追加。
例 子 : 要 保 留 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。 Including %M in 在log_filename中包括%M容许
发生任何尺寸驱动的轮转来选择一个不一样于每一个小时的初始文件名的新文件名。
syslog_facility (enum)
当 启 用 了 向syslog记录时,这个 参 数 决 定 要 使 用 的syslog“设 备”。默认值是LOCAL0。
syslog_ident (string)
当启用了向syslog记录时,这个参数决定用来标识syslog中的PostgreSQL消息的程序名。默认值是postgres。
event_source (string)当启用了向事件日志记录时,这个参数决定用来标识日志中PostgreSQL消息的程序名。默认值是PostgreSQL。
8.2. 何时记录日志
client_min_messages (enum)控制被发送给客户端的消息级别。有效值是DEBUG五、 DEBUG四、DEBUG三、DEBUG二、
DEBUG一、LOG、NOTICE、 WARNING、ERROR、FATAL和PANIC。每一个级别都包括其后的全部级别。级别越靠后,被发送的消息越少。默认值是NOTICE。注意LOG在这里有
与log_min_messages中不一样的排名。
log_min_messages (enum)控制哪些消息级别被写入到服务器日志。有效值是DEBUG五、DEBUG四、
DEBUG三、DEBUG二、DEBUG一、 INFO、NOTICE、WARNING、 ERROR、LOG、FATAL和PANIC。每一个级别都包括之后的全部级别。级别越靠后,被发送的消息越少。默认值
是WARNING。注意LOG在这里有与log_min_messages中不一样的排名。只有超级用户能够改变这个设置。
log_min_error_statement (enum)控制哪些致使一个错误状况的 SQL 语句被记录在服务器日志中,
默认值是ERROR,它表示致使错误、日志消息、致命错误或恐慌错误的语句将被记录在日志中。
log_min_duration_statement (integer)若是语句运行至少指定的毫秒数,将致使记录每个这种完成的语句的持续时间。
设置为 -1 (默认值)将中止记录语句持续时间。
注意: 当把这个选项和log_statement一块儿使用时,已经被log_statement记录的语句文本不
会在持续时间日志消息中重复。若是你没有使用syslog,咱们推荐你使用log_line_prefix记录
PID 或会话 ID,这样你可使用进程 ID 或会话 ID 把语句消息连接到后来的持续时间消息。python
消息严重级别
严重 性用法 syslog eventlog
DEBUG1..DEBUG5 为开发者提供连续的更详细的信息。DEBUG INFORMATION
INFO 提供用户隐式要求的信息,例如来自VACUUMVERBOSE的输出。INFO INFORMATION
NOTICE 提供可能对用户有用的信息,例如长标识符截断提示。NOTICE INFORMATION
WARNING 提供可能出现的问题的警告,例如在一个事务块外COMMIT。NOTICE WARNING
ERROR 报告一个致使当前命令中断的错误。WARNING ERROR
LOG 报告管理员可能感兴趣的信息,例如检查点活动。INFO INFORMATION
FATAL 报告一个致使当前会话中断的错误。ERR ERROR
PANIC 报告一个致使全部数据库会话中断的错误。CRIT ERROR
8.3. 记录什么到日志
application_name (string)一般由一个链接服务器后的的应用程序设置
debug_print_parse (boolean)
debug_print_rewritten (boolean)
debug_print_plan (boolean)这个参数启用发出各类调试输出。当设置时,会打印生成的解析树, 查询重
写输出,或执行的每一个查询的执行计划。这些信息是在LOG 信息级别发出,所以默认的,它们会出如今服务器日志中,但不会发送给客户端。
参数缺省是off。
debug_pretty_print (boolean) 被设置时,debug_pretty_print会缩进由debug_print_parse、debug_print_rewritten或 debug_print_plan
产生的输出。这将致使比关闭参数时使用的“紧凑”模式可读性更强可是更长的输出。默认是打开的。
log_checkpoints (boolean)致使检查点和重启点被记录在服务器日志中。默认值是关闭。
log_connections (boolean)致使每一次尝试对服务器的链接被记录,客户端认证的成功完成也会被记录。缺省是off。
注意: 某些客户端程序(例如psql)在要求密码时会尝试链接两次,所以重复的“收到链接”消
息并不必定表示一个错误。
log_disconnections (boolean)记录会话终止缘由。日志输出提供信息相似于log_connections, 以及会话持续时间。缺省是off。
log_duration (boolean)致使每个完成的语句的持续时间被记录。默认值是off。
log_error_verbosity (enum)控制为每个被记录的消息要写入到服务器日志的细节量。有效值
是TERSE、DEFAULT和VERBOSE,每个都为显示的消息增长更多域。
log_hostname (boolean)默认状况下,链接日志消息只显示链接主机的 IP 地址。
log_line_prefix (string)一个printf风格的字符串,它在每一个日志行的开头输出。%字符开始“转义序列”,它将被按照下文描述的替换成状态信息。
转义 效果 只限会话
%a 应用名 是
%u 用户名 是
%d 数据库名 是
%r 远程主机名或 IP 地址,以及远程端口是
%h 远程主机名或 IP 地址 是
%p 进程 ID 否
%t 无毫秒的时间戳 否
%m 带毫秒的时间戳 否
%i 命令标签:会话当前命令的类型是
%e SQLSTATE 错误代码 否
%c 会话 ID:见下文 否
%l 对每一个会话或进程的日志行号,从 1 开始否
%s 进程开始的时间戳 否
%v 虚拟事务 ID(backendID/localXID)否
%x 事务 ID (若是未分配则为0)否
%q 不产生输出,可是告诉非会话进程在字符串的这一点中止;会话进程忽略否
%% 纯文字 % 否
log_lock_waits (boolean)控制当一个会话为得到一个锁等到超过deadlock_timeout时,是否要产生一个日志消息。默认值是off
log_statement (enum)控制哪些SQL语句被记录。有效值是none(off)、ddl、mod和 all(所 有 语句)。
ddl记录全部数据定义语句,例如CREATE、ALTER和 DROP语句。mod记录全部ddl语 句 , 外 加 数 据 修 改 语 句 例 如INSERT, UPDATE、DELETE、TRUNCATE, 和COPY
FROM。若是PREPARE、EXECUTE和 EXPLAIN ANALYZE包含合适类型的命令,它们也会被记录。默认值是none。
注意: 即便设置了log_statement=all,包含 简单语法错误的语句也不会被记录。
由于仅在完成基本的语法分析并 肯定了语句类型以后才记录日志。
log_replication_commands (boolean)致使每一个复制命令记录在服务器日志中。缺省值是off。
log_temp_files (integer)控制记录临时文件名和尺寸。临时文件能够被建立用来排序、哈希和存储临时查询结果。
当每个临时文件被删除时都会制做一个日志项。一个零值记录全部临时文件信息,默认设置为 -1,它禁用这种记录。
log_timezone (string)设置在服务器日志中写入的时间戳的时区。和TimeZone不一样,这个值是集簇范围的,所以全部会话将报告一致的时间戳。
内建默认值是GMT,可是一般会被在postgresql.conf中覆盖。
8.4. 使用CSV 格式的日志输出
包括在log_destination中的csvlog,提供了一个 便捷的方式向数据库中导入日志文件。
(CSV)格式的日志行,包括这些列: 带毫秒的时间戳、 用户名、 数据库名、 进程 ID、
客户端主机:端口号、 会话 ID、 每一个会话的行号、 命令标签、 会话开始时间、 虚拟事务
ID、 普通事务 ID、 错误严重性、 SQLSTATE 代码、 错误消息、 错误消息详情、 提示、
致使错误的内部查询(若是有)、 错误位置所在的字符计数、 错误上下文、 致使错误的
用户查询(若是有且被log_min_error_statement启用)、 错误位置所在的字符计数、 在
PostgreSQL 源代码中错误的位置(若是log_error_verbosity被设置为verbose)以及应用
名。
下面是一个定义用来存储 CSV 格式日志输出的样表:
CREATE TABLE postgres_log
(
log_time timestamp(3) with time zone,
user_name text,
database_name text,
process_id integer,
connection_from text,
session_id text,
session_line_num bigint,
command_tag text,
session_start_time timestamp with time zone,
virtual_transaction_id text,
transaction_id bigint,
error_severity text,
sql_state_code text,
message text,
detail text,
hint text,
internal_query text,
internal_query_pos integer,
context text,
query text,
query_pos integer,
location text,
application_name text,
PRIMARY KEY (session_id, session_line_num)
);
使用COPY FROM命令将一个日志文件导入到这个表中
COPY postgres_log FROM ’/full/path/to/logfile.csv’ WITH csv;
8.5. 进程标题
这些设置控制进程标题如ps是如何被修改的
cluster_name (string)设置出如今集群中的全部进程标题中的集群名称。
update_process_title (boolean)启用更新进程标题的特性,这个特性在每次服务器接收到一个新SQL命令时都会更新进
程的标题。
9. 运行时统计数据
9.1. 查询和索引统计收集器
这些参数控制服务器范围的统计数据收集特性。当统计收集被启用时,被产生的数据能够经过pg_stat和pg_statio系统视图族访问。
track_activities (boolean)启用对每一个会话的当前执行命令的信息收集,还有命令开始执行的时间。
默认为打开。注意即便被启用,这些信息也不是对全部用户可见,只有超级用户和拥有报告信息的会话的用户可见,
track_activity_query_size (integer)指定跟踪每一个活动会话当前执行命令所保留的字节数,默认值是 1024。
track_counts (boolean)启用在数据库活动上的统计收集。默认打开,由于自动清理守护进程须要被收集的信息。
track_io_timing (boolean)启用对系统 I/O 调用的计时。默认关闭,
由于它将重复地向操做系统查询当前时间,这会在某些平台上致使显著的负荷。
track_functions (enum)启用跟踪函数调用计数和用时。
指定pl只跟踪过程语言函数,指定all还会跟踪 SQL 和C 语言函数。默认值是none,它禁用函数统计跟踪。
stats_temp_directory (string)设置存储临时统计数据的目录。默认值是pg_stat_tmp。
9.2. 统计监控
log_statement_stats (boolean)
log_parser_stats (boolean)
log_planner_stats (boolean)
log_executor_stats (boolean)
对每一个查询,向服务器日志里输出相应模块的性能统计。
10. 自动清理
这些设置控制自动清理特性的行为。
autovacuum (boolean)控制服务器是否运行自动清理启动器后台进程。默认为开启,不过要自动清理正常工做还须要启用track_counts。
autovacuum_naptime (integer)指定自动清理在任意给定数据库上运行的最小延迟。
在每一轮中后台进程检查数据库并根据须要为数据库中的表发出VACUUM和ANALYZE命令。默认值为1分钟
autovacuum_vacuum_threshold (integer)指定能在一个表上触发VACUUM的被插入、被更新或被删除元组的最小数量。默认值为50个元组。
autovacuum_analyze_threshold (integer)指定能在一个表上触发ANALYZE的被插入、被更新或被删除元组的最小数量。默认值为50个元组。
autovacuum_vacuum_scale_factor (floating point)
指定一个表尺寸的分数,在决定是否触发VACUUM时将它加到autovacuum_vacuum_threshold上。默认值为0.2(表尺寸的20%)。
autovacuum_analyze_scale_factor (floating point)
指定一个表尺寸的分数,在决定是否触发ANALYZE时将它加到autovacuum_analyze_threshold上。默认值为0.1(表尺寸的10%)。
autovacuum_freeze_max_age (integer)
指 定 在 一 个VACUUM操 做 被 强 制 执 行 来 防 止 表 中事务ID回卷以前,一个表的pg_class.relfrozenxid域能保持的最大年龄(事务的)。
autovacuum_multixact_freeze_max_age (integer)指 定 在 一 个VACUUM操 做 被 强 制 执 行 来 防 止 表 中多事务ID回卷以前,一个表
的pg_class.relminmxid域能保持的最大年龄(多事务的)。
autovacuum_vacuum_cost_delay (integer)指定用于自动VACUUM操做中的代价延迟值。若是指定-1(默认值 ,
则使用vacuum_cost_delay值。默认值为20毫秒。
autovacuum_vacuum_cost_limit (integer)指定用于自动VACUUM操做中的代价限制值。若是指定-1(默认值),则使用vacuum_cost_limit值。
11. 客户端链接默认值
11.1. 语句行为
search_path (string)指定当一个对象(表、数据类型、函数等)被用一个无模式限定的简单名称引
用时,用于进行搜索该对象的模式顺序。search_path的值必需是一个逗号分隔的模式名列表。
row_security (boolean)控制是否提升错误以代替应用行安全策略。当设置为on时,策略每每适用。当
设置为off时,查询失败,这将应用至少一个策略。默认为on。
default_tablespace (string)指定当一个CREATE命令没有显式指定一个表空间时,建立对象(表和索引)的默认表空间。
temp_tablespaces (string)指定当一个CREATE命令没有显式指定一个表空间时,建立临时对象(临时表和临时表上的索引)的默认表空间。
check_function_bodies (boolean)
一般为打开 。当设置为off时,它禁用CREATE FUNCTION期间对函数体字符串的验证。
禁用验证避免了验证处理的反作用而且避免了如向前引用致使的伪确定。在
表明其余用户载入函数以前设置这个参数为off;pg_dump会自动这样作。
default_transaction_isolation (enum)每一个 SQL 事务都有一个隔离级别,能够是“读未提交”、“读已提交”、“可重复读”或
者“可序列化”。这个参数控制每一个新事务的默认隔离级别。默认是“读已提交”。
default_transaction_read_only (boolean)一个只读的 SQL 事务不能修改非临时表。
控制每一个新事务的默认只读状态 。默认是off(读/写)。
default_transaction_deferrable (boolean)控制每一个新事务的默承认延迟状态。默认值是off。
session_replication_role (enum)为当前会话控制复制相关的触发器和规则的触发。
可能的值有origin(默认)、replica和local。
statement_timeout (integer)停止任何使用了超过指定毫秒数的语句,从命令到达服务器开始计时。默认为0.
不推荐在postgresql.conf中设置statement_timeout,由于它会影响全部会话。
lock_timeout (integer)任何语句在试图获取表、索引、行或其余数据库对象上的锁时等到超过指定的毫秒数,该语句将被停止。
该时间限制独立地应用于每一次锁获取尝试。该限制会应用到显式锁定请求(如LOCK TABLE或不带NOWAIT的SELECT FOR UPDATE without NOWAIT)和
隐式得到的锁。一个零值(默认)将关闭这个参数。
与statement_timeout不一样,这个超时只在等待锁时发生。注意若是statement_timeout为非零,设置lock_timeout为相同或更大的值没有意义,由于
事务超时将老是第一个被触发。
不推荐在postgresql.conf中设置lock_timeout,由于它会影响全部会话。
vacuum_freeze_table_age (integer)当表的pg_class.relfrozenxid域达到该设置指定的年龄时,VACUUM会执行一次全表扫
描。默认值是 1.5 亿个事务。
vacuum_freeze_min_age (integer)指定VACUUM在扫描表时用来决定是否冻结行版本的切断年龄(以事务计)。默认值是 5
千万个事务。
vacuum_multixact_freeze_table_age (integer)若是表的pg_class.relminmxid域超过了这个设置指定的年龄,VACUUM会执行一次
全表扫描。默认值是 1.5 亿个组合事务。
vacuum_multixact_freeze_min_age (integer)指定VACUUM在扫描表时用来决定是否把组合事务 ID 替换为一个更新的事务 ID
或组合事务 ID 的切断年龄(以组合事务计)。默认值是 5 千万个组合事务。
bytea_output (enum)设置bytea类型值的输出格式。有效值是hex(默认)和 escape(传统的 PostgreSQL格式)。
xmlbinary (enum)设置二进制值如何被编码为XML。
xmloption (enum)当在XML和字符串值之间进行转换时,不管设置DOCUMENT或 CONTENT都是隐式的。
gin_pending_list_limit (integer)当启用fastupdate时,设置正在使用的GIN挂起列表的最大尺寸。
11.2. 区域和格式化
DateStyle (string)设置日期和时间值的显示格式,以及解释有歧义的日期输入值的规则。
输出格式声明(ISO、Postgres、SQL或German)、 输入/输出的年/月/日顺序(DMY、MDY或YMD)
IntervalStyle (enum)设置间隔值的显示格式。值sql_standard将产生匹配 SQL 标准间隔文本的输出。
当DateStyle参数被设置为ISO时,值postgres(默认)将产生匹配PostgreSQL发行 8.4以前的输出。
当DateStyle参数被设置为非ISO输出时,值postgres_verbose会产生匹配PostgreSQL发行 8.4 以前的输出。
TimeZone (string)设置用于显示和解释时间戳的时区。内建默认值是GMT,可是它一般会在postgresql.conf中被覆盖
timezone_abbreviations (string)设置服务器接受的日期时间输入中使用的时区缩写集合。默认值为’Default’
extra_float_digits (integer)这个参数为浮点值调整显示的位数,包括float四、float8以及几何数据类型。
client_encoding (string)设置客户端编码(字符集)。默认使用数据库编码
lc_messages (string)设置消息显示的语言。可接受的值是系统相关的
lc_monetary (string)设置用于格式化货币量的区域,例如用to_char函数族
lc_numeric (string)设置用于格式化数字的区域,例如用to_char函数族。
lc_time (string)设置用于格式化日期和时间的区域,例如用to_char函数族。
default_text_search_config (string)选择被那些没有显式参数指定配置的文本搜索函数变体使用的文本搜索配置。
11.3. 共享库预载入
为了载入附加的功能或者达到提升性能的目的,可用多个设置来预先载入共享库到服务器中
例如’$libdir/mylib’设置可能会致使mylib.so(或者某些平台上的mylib.sl)从安装的标准库目录被预装载。
一般是使用’$libdir/plXXX’语法,其中的XXX是pgsql、perl、tcl或python。
local_preload_libraries (string)指定一个或者多个要在链接开始时预载入的共享库。
session_preload_libraries (string)指定一个或者多个要在链接开始时预载入的共享库。
shared_preload_libraries (string)指定一个或者多个要在服务器启动时预载入的共享库。
11.4. 其余默认值
dynamic_library_path (string)若是须要打开一个能够动态装载的模块而且在CREATE FUNCTION或LOAD命令中指定的文
件名没有目录部分(即名字中不包含斜线),那么系统将搜索这个路径以查找所需的文件。
必须是一个冒号分隔
dynamic_library_path = ’/usr/local/lib/postgresql:/home/my_project/lib:$libdir’
gin_fuzzy_search_limit (integer)GIN 索引返回的集合尺寸的软上限。
12. 锁管理
deadlock_timeout (integer)进行死锁检测以前在一个锁上等待的总时间(以毫秒计),默认是 1 秒(1s)
当log_lock_waits被设置时,这个参数还能够决定发出关于锁等待的日志以前等待的时长。
max_locks_per_transaction (integer)共享锁表跟踪在max_locks_per_transaction*(max_connections+max_prepared_transactions) 个对象(如表)上的锁。
所以,在任何一个时刻,只有不超过这么多个可区分对象可以被锁住。
这个参数控制为每一个事务分配的对象锁的平均数量。
max_pred_locks_per_transaction (integer)共享谓词锁表跟踪
13. 版本和平台兼容性
13.1. 之前的PostgreSQL 版本
array_nulls (boolean)控制数组输入解析器是否把未用引号的NULL识别为一个空数组元素。默认为on
backslash_quote (enum)参数控制字符串文本中的单引号是否可以用\’来表示。
default_with_oids (boolean)控制CREATE TABLE和CREATE TABLE AS在既没有指定WITH OIDS也没有指
定WITHOUT OIDS的状况下,是否在新建立的表中包含 OID 列。
它还决定被SELECTINTO建立的表里面是否包含 OID 。这个参数在默认状况下为off。在PostgreSQL 8.0 及
更早的版本中,它默认为on。
咱们反对在用户表中使用 OID ,所以大多数安装应该禁用这个变量
escape_string_warning (boolean)
打 开 时 , 如 果 在 普 通 字 符 串 文 本 中 (’...’语 法 ) 出 现 了 一 个 反 斜 线 (\) 并
且standard_conforming_strings为关闭,那么就会发出一个警告。默认值是on。
lo_compat_privileges (boolean)
在9.0以前的版本中,大对象没有链接权限,而且对全部用户哦都市可读可写的。
将这个变量设置为on,从而禁用新的权限检查,以与之前的版本兼容。 默认是off。
operator_precedence_warning (boolean)当开启时,解析器为了可能修改的任何结构发出警告, 意味着PostgreSQL 9.4操做符优
先级中做为修改结果。 对审计应用程序是很是有用的,缺省off。
quote_all_identifiers (boolean)当数据库产生 SQL 时,强制全部标识符被引号包围,即便它们(当前)不是关键字 。
sql_inheritance (boolean)控制未修饰的表引用是否被视做要包括继承的子表。默认值是on
standard_conforming_strings (boolean)控制普通字符串文本(’...’)是否按照 SQL 标准把反斜线当普通文本。默认值为on
synchronize_seqscans (boolean)它容许对大型表的顺序扫描与其余扫描同步,所以并发扫描能够在几乎相同的时刻读取
相同的块,这样能够分担 I/O 负载。
13.2. 平台和客户端兼容性
transform_null_equals (boolean)当打开时,形为expr = NULL(或NULL = expr)的表达式将被当作expr IS NULL也
就是说,若是expr得出空值值则返回真,不然返回假。正确的 SQL 标准兼容的expr =
NULL行为老是返回空(未知)。所以这个参数默认为off。
14. 错误处理
exit_on_error (boolean)若是为真,任何错误将停止当前会话。默认状况下,这个值被设置为假,这样只有
FATAL 错误(致命)将停止会话。
restart_after_crash (boolean)当被设置为真(默认值)时,PostgreSQL将在一次后端崩溃后自动从新初始化。
15. 预置选项
下列“参数”是只读的,它们是在编译或安装PostgreSQL时决定的。
block_size (integer)报告一个磁盘块的大小。默认值是 8192 字节。
data_checksums (boolean)报告对这个集簇是否启用了数据校验码。
debug_assertions (boolean)报告是否启用断言编译PostgreSQL。
integer_datetimes (boolean)报告PostgreSQL是否在编译时打开了 64 位整很多天期和时间。默认值是on。
lc_collate (string)报告文本数据排序使用的区域。
lc_ctype (string)报告决定字符分类的区域。
max_function_args (integer)报告函数参数的最大数量。默认值是100 个参数。
max_identifier_length (integer)报告标识符的最大长度。默认值是 64
max_index_keys (integer)报告索引键的最大数目。默认值是 32 个
segment_size (integer)报告一个文件段中能够存储的块(页)的数量。默认是1GB。
server_encoding (string)报告数据库的编码(字符集)一般,客户端只须要关心client_encoding的值。
server_version (string)报告服务器版本数值。
server_version_num (integer)报告服务器版本数值的整数值
wal_block_size (integer)报告一个 WAL 磁盘块的尺寸
wal_segment_size (integer)报 告 WAL 段 文 件 中 的 块 ( 页 ) 数 。
16. 自定义选项
这个特性被设计用来由附加模块向PostgreSQL添加一般不为系统知道的参数(例如过程语
言)。这容许使用标准方法配制扩展模块。
17. 开发者选项
下面的参数目的是用在PostgreSQL源代码上, 而且在某些状况下能够帮助恢复严重损坏了的
数据库。在一个生产数据库中没有理由使用它们。
allow_system_table_mods (boolean)
容许对系统表结构的修改。它能够被initdb使用。这个参数只能在服务器启动时设置。
ignore_system_indexes (boolean)读取系统表时忽略系统索引(可是修改系统表时依然同时更新索引)。
post_auth_delay (integer)
pre_auth_delay (integer)
trace_notify (boolean)
trace_recovery_messages (enum)
trace_sort (boolean)
trace_locks (boolean)
trace_lwlocks (boolean)
trace_userlocks (boolean)
trace_lock_oidmin (integer)
trace_lock_table (integer)
debug_deadlocks (boolean)
log_btree_build_stats (boolean)
wal_debug (boolean)
ignore_checksum_failure (boolean)
zero_damaged_pages (boolean)
8. 短选项
为了方便起见,系统中还为一些参数提供了单字母的命令行选项开关。
短选项 等效于
-B x shared_buffers = x
-d x log_min_messages = DEBUGx
-e datestyle = euro
-fb, -fh, -fi, -fm, -fn, -fo, -fs, -ft enable_bitmapscan = off,
enable_hashjoin = off,
enable_indexscan = off,
enable_mergejoin = off,
enable_nestloop = off,
enable_indexonlyscan = off,
enable_seqscan = off, enable_tidscan
= off
-F fsync = off
-h x listen_addresses = x
-i listen_addresses = ’*’
-k x unix_socket_directories = x
-l ssl = on
-N x max_connections = x
-O allow_system_table_mods = on
-p x port = x
-P ignore_system_indexes = on
-s log_statement_stats = on
-S x work_mem = x
-tpa, -tpl, -te log_parser_stats = on,
log_planner_stats = on,
log_executor_stats = on
-W x post_auth_delay = xgit