服务器配置
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)控制被发送给客户端的消息级别。有效值是DEBUG5、 DEBUG4、DEBUG3、DEBUG2、
DEBUG1、LOG、NOTICE、 WARNING、ERROR、FATAL和PANIC。每个级别都包括其后的所有级别。级别越靠后,被发送的消息越少。默认值是NOTICE。注意LOG在这里有
与log_min_messages中不同的排名。
log_min_messages (enum)控制哪些消息级别被写入到服务器日志。有效值是DEBUG5、DEBUG4、
DEBUG3、DEBUG2、DEBUG1、 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 把语句消息链接到后来的持续时间消息。
消息严重级别
严重性用法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)这个参数为浮点值调整显示的位数,包括float4、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 xshared_buffers = x
-d xlog_min_messages = DEBUGx
-edatestyle = 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
-Ffsync = off
-h xlisten_addresses = x
-ilisten_addresses = ’*’
-k xunix_socket_directories = x
-lssl = on
-N xmax_connections = x
-Oallow_system_table_mods = on
-p x port = x
-Pignore_system_indexes = on
-slog_statement_stats = on
-S xwork_mem = x
-tpa, -tpl, -te log_parser_stats = on,
log_planner_stats = on,
log_executor_stats = on
-W xpost_auth_delay = x