1. PostgreSQL 参数参考手册

本文档贡献单位及贡献者:

瀚高基础软件股份有限公司:徐云鹤、张波、咸士杰、类延良

中国开源软件推进联盟PostgreSQL分会:魏波

本文档错误反馈方式:

文档下载: PostgreSQL参考手册

1.1. Resource Usage / Disk

1.1.1. temp_file_limit

参数名称

temp_file_limit

参数值数据类型

integer

默认值

-1,表示不限制

取值范围

-1到2147483647

参数单位

如果指定的值不带单位,则以KB为单位

参数含义

指定一个进程可以占用的最大的磁盘空间。该磁盘空间可以用于temporary files(sort及hash使用)或者持有cursor的storage file。试图超过该限制的transaction会被取消。

是否可session级修改

可以,此时仅限于superuser可以在session级修改

修改后何时生效

非session级修改Reload即可生效;Session级修改时会立即在session级生效

1.2. Replication

1.2.1. track_commit_timestamp

参数名称

track_commit_timestamp

参数值数据类型

bool

默认值

off

取值范围

on和off

参数单位

参数含义

记录transaction的提交时间。注意:只有当这个参数是on时,函数pg_xact_commit_timestamp(xid)、pg_last_committed_xact()才能获得已提交事务的时间值。

是否可session级修改

修改后何时生效

重启PG instance生效

1.3. Version and Platform Compatibility / Other Platforms and Clients

1.3.1. transform_null_equals

参数名称

transform_null_equals

参数值数据类型

bool

默认值

off

取值范围

on和off

参数单位

参数含义

当本参数值为on时,PG会将expr=NULL(或者NULL=expr)视为expr IS NULL.本参数仅仅影响=NULL这个形式,不会影响其他形式(如in)

是否可session级修改

可以,superuser和普通用户均可以在session级修改

修改后何时生效

Reload即可生效Session级修改时会立即在session级生效

1.4. Resource Usage / Kernel Resources

1.4.1. max_files_per_process

参数名称

max_files_per_process

参数值数据类型

integer

默认值

1000

取值范围

64到2147483647

参数单位

参数含义

本参数用于设置每个server subprocess允许同时打开的files的最大数量。如果遇到 "Too many open files"的提示,请尝试减少本参数值。

是否可session级修改

修改后何时生效

重启PG instance生效。

1.5. Process Title

1.5.1. cluster_name

参数名称

cluster_name

参数值数据类型

string

默认值

空值

取值范围

参数单位

参数含义

本参数用于设置PGCluster的名字,可以用操作系统命令ps -ef| grep postgres查看该名字。该名字会出现在所有server process的开头位置,另外,对于standby连接来说,该名字还是默认的application name.

是否可session级修改

修改后何时生效

重启PG instance生效。

1.5.2. update_process_title

参数名称

update_process_title

参数值数据类型

Bool

默认值

on(除windows之外的平台);off(Windows平台)

取值范围

on和off

参数单位

参数含义

每当服务器接收到一个新的 SQL 命令时都更新process title

是否可session级修改

是,此时仅限于superuser可以在session级修改

修改后何时生效

Reload即可生效Session级修改时会立即在session级生效

1.6. Replication / Master Server

1.6.1. synchronous_standby_names

参数名称

synchronous_standby_names

参数值数据类型

string

默认值

空字符串

取值范围

参数单位

参数含义

本参数为primary角色库参数。本参数值区分大小写。本参数指定了支持同步复制的standby server清单。standby server的name是standby连接信息中的application_name,在物理复制standby中,standby server的name是在primary_conninfo中设置的,如果cluster_name配置参数的配置过了,那么standby server的name默认是cluster_name参数值,否则是walreceiver对于逻辑复制,可以在subscription中设置连接信息,默认值是subscription name本参数使用如下语法指定了一系列的standby servers的列表:[FIRST] num_sync ( standby_name [, …​] )ANY num_sync ( standby_name [, …​] )standby_name [, …​]
num_sync代表同步standby的个数举例,FIRST 3 (s1, s2, s3, s4)的含义:s1, s2, s3这三个standby是同步standbys4这个standby是潜在的同步standby(potential synchronous standbys)如果当前同步standby不论什么原因断开,它的位置会立即被next-highest-priority standby取代。关键字FIRST是可选的。FIRST 3 (s1, s2, s3, s4)中,优先级由大到小为s1>s2>s3>s4
举例, ANY 3 (s1, s2, s3, s4) 的含义:s1, s2, s3, s4这四个standby 中的任意3个standby server应用wal变化之后,primary端的事务才能提交请务必注意:FIRST 和ANY关键字是大小写敏感的。如果这两个关键字被用于standby server的name,那么standby_name需要用双引号引起来。在PostgreSQL 9.6之前版本中使用的第三种语法已经受到支持。该语法与"FIRST 1"是相同作用。比如, FIRST 1 (s1, s2) 和 s1, s2 有相同的含义:要么s1要么s2被选为同步standby
表示匹配任何standby name
没有机制来确保standby name的唯一性。在重复发生时,匹配到的standby 会被视为更高的优先级。尽管确切地说哪个是不确定的注意:每个standby_name应该是有效地SQL 标识符,除非是
。如果需要,你可以使用双引号。但是请注意:standby_names与standby application_name 比较时,是不区分大小写的,不论有无双引号。
如果synchronous_standby_names参数不指定值,同步复制不会启用。即使同步复制被启用,通过设置synchronous_commit配置参数为local或者off,单个事务可以被配置为不等待standby端的wal被应用。
本参数可以在postgresql.conf文件或者在the server command line设置

是否可session级修改

修改后何时生效

Reload即可生效。

1.6.2. vacuum_defer_cleanup_age

参数名称

vacuum_defer_cleanup_age

参数值数据类型

integer

默认值

0

取值范围

0到1000000

参数单位

参数含义

该参数指定了在primary库上vacuum和HOT updates 会延迟清理dead row versions的事务的数量。默认值是零个事务,零个事务的含义是dead row versions会尽可能快的被removed掉。尽可能快是指dead row versions不会被任何open transaction可见。你可以在hot standby环境中的primary端为此参数设置为非零值,这允许standby端的query运行更长的时间以便完成,而不会遇到过早的dead row versions cleanup而导致冲突。由于本参数值是根据在primary上发生的写入事务的数量来衡量的,因此,很难预测会为standby query增加多长时间。
本参数可以在postgresql.conf文件或者在the server command line设置
你可以考虑在standby 端使用hot_standby_feedback配置参数作为vacuum_defer_cleanup_age的替代。本参数不会防止那些已经达到age(由old_snapshot_threshold配置参数指定)的dead rows的清理。

是否可session级修改

修改后何时生效

Reload即可生效。

1.7. Replication / Subscribers

1.7.1. max_logical_replication_workers

参数名称

max_logical_replication_workers

参数值数据类型

integer

默认值

4

取值范围

0到262143

参数单位

参数含义

本参数设置Logical replication workers进程的最大数量,此处的worker进程包括两种:apply workers 和table synchronization workers。Logical replication workers进程的数量从max_worker_processes配置参数定义的池中获取。

是否可session级修改

修改后何时生效

重启PG instance生效。

1.7.2. max_sync_workers_per_subscription

参数名称

max_sync_workers_per_subscription

参数值数据类型

integer

默认值

2

取值范围

0到262143

参数单位

参数含义

指定了每个subscription中synchronization workers的最大数量。本参数控制在subscription初始化 或者 新表加入时的initial data copy的并行度。目前,每个table只能指定一个synchronization workersynchronization workers从max_logical_replication_workers配置参数定义的池中取得。

是否可session级修改

修改后何时生效

Reload即可生效。

1.8. Write-Ahead Log / Archive Recovery

1.8.1. restore_command

参数名称

restore_command

参数值数据类型

string

默认值

空字符串

取值范围

参数单位

参数含义

恢复时指定archive wal的位置 restore_command = 'cp /mnt/server/archivedir/%f "%p"' restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows restore_command对应的命令执行成功之后,restore_command返回零,
%f代表archived wal文件名 %p代表copy destination path name %r代表含有最后一个有效的resart point的file的文件名 %%代表一个%字符(当需要写入%字符的情况下使用)
本参数需要在pg instance启动之前进行设置。

是否可session级修改

修改后何时生效

重启PG instance生效。

1.8.2. archive_cleanup_command

参数名称

archive_cleanup_command

参数值数据类型

string

默认值

空字符串

取值范围

参数单位

参数含义

本参数定义了在每个restart point时所执行的shell命令。
archive_cleanup_command参数的目的是提供一个清理不再被standby server所需要的老的archived wal file的机制。
%r代表最后一个有效的restart point的wal file。该wal file是最早一个必须保留的文件,以便允许restore操作可以被restart。注意: restart point 是一个 point ,该point用于standby server重启recovery操作。因此,所有早于%r的文件可以被安全的清理掉。本信息可以用来truncate掉archive wal file,以便满足从当前restore可以restart的最小需求。 pg_archivecleanup实用命令常被用在单个standby配置的archive_cleanup_command参数中 archive_cleanup_command = 'pg_archivecleanup /mnt/server/archivedir %r'
%%代表一个%字符(当需要写入%字符的情况下使用)如果命令返回非零值,一个警告日志消息会被写入。一个例外是:当命令被一个signal终止或者shell中有错误时,一个fatal error会被抛出。
本参数可以在postgresql.conf设置,也可以在server command line设置。

是否可session级修改

修改后何时生效

Reload即可生效。

1.8.3. recovery_end_command

参数名称

recovery_end_command

参数值数据类型

String

默认值

空字符串

取值范围

参数单位

参数含义

本参数用于定义在recovery结束时候的需要执行的shell命令。如果命令返回非零值,一个警告日志消息会被写入,然后数据库会继续启动。一个例外是:当命令被一个signal终止或者shell中错误时,数据库不会继续启动。%r代表最后一个有效的restart point的wal file

是否可session级修改

修改后何时生效

Reload即可生效。

1.9. Error Handling

1.9.1. exit_on_error

参数名称

exit_on_error

参数值数据类型

Bool

默认值

off

取值范围

on和off

参数单位

参数含义

当设置为on时,任何error均会导致session被终止。默认情况下,本参数值为off,只有FATAL error才会终止session。 postgres=# set exit_on_error=on; SET postgres=# show exit_on_error ; -[RECORD 1]-+--- exit_on_error | on
postgres=# begin; BEGIN postgres=# select \ form t1; FATAL: syntax error at or near "form" LINE 1: select \* form t1; ^ server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. The connection to the server was lost. Attempting reset: Succeeded.postgres=#

是否可session级修改

修改后何时生效

Reload即可生效Session级别修改可以立即生效。

1.9.2. restart_after_crash

参数名称

restart_after_crash

参数值数据类型

bool

默认值

on

取值范围

参数单位

参数含义

当设置为on时,PostgreSQL会在backend crash之后重新初始化(即:restart)。在某些情况下,比如PostgreSQL被Clusterware调用时,需要禁用PostgreSQL的restart(将该参数值设置为off)以便clusterware获得PostreSQL的控制权并采取适当的操作。

是否可session级修改

修改后何时生效

Reload即可生效

1.9.3. data_sync_retry

参数名称

data_sync_retry

参数值数据类型

bool

默认值

off

取值范围

off 和on

参数单位

参数含义

如果设置为off(默认值),当PostgreSQL flush数据到文件系统上遇到failure时,PostgreSQL会抛出一个panic级别的error。这会导致数据库服务crash掉。本参数只能在数据库服务启动之前设置。在某些操作系统中,当回写(write-back)失败之后,kernel的page cache中的数据状态是未知的(unknown).在一些情况下,它可能会被完全忘记,设置为尝试是不安全的,在实际上数据已经丢失的情况下,第二次尝试可能会报告成功,在这些场景中,避免数据损失的唯一方法是解决掉硬件问题之后从wal中恢复。当设置为on时,PostgreSQL会报告一个error并会继续运行,data flushing操作会在稍后的checkpoint中尝试。注意:仅在调查操作系统对buffered data的处理以防回写失败的情况下,才将其设置为on。

是否可session级修改

修改后何时生效

重启PG instance生效。

1.10. Write-Ahead Log / Archiving

1.10.1. archive_mode

参数名称

archive_mode

参数值数据类型

enum

默认值

off

取值范围

off,on,always

参数单位

参数含义

指定归档模式。on表示启用归档模式,当wal_level配置参数值为minimal时, archive_mode 不能设置为on。当本参数值设置为always时,standby 实例会为收到的每个wal segments调用归档命令,也就是standby实例上也会进行wal的归档操作。本参数仅仅能在pg启动时设置

是否可session级修改

修改后何时生效

重启PG instance生效。

1.10.2. archive_command

参数名称

archive_command

参数值数据类型

string

默认值

空字符串

取值范围

参数单位

参数含义

定义对wal进行归档的命令。当archive_mode配置参数启用并且archive_command配置参数是空字符串时,wal archiving暂时被禁用,但是pg会继续积累wal segment文件。archive_command参数值设置为/bin/true会禁用归档,但这样会导致wal文件归档中断,归档中断是无法进行归档恢复的,请注意这一点。使用举例如下: archive_command = 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f' # Unix archive_command = 'copy "%p" "C:\\server\\archivedir\\%f"' # Windows
退出码是零代表本命令正常运行。本参数可以在postgresql.conf或者server command line设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.10.3. archive_timeout

参数名称

archive_timeout

参数值数据类型

integer

默认值

0

取值范围

0到1073741823

参数单位

若是不指定单位,那默认的单位是秒

参数含义

强制进行wal segments归档的时长。使用本参数归档出来的wal segment与正常的wal segment是相同的大小。因此,本参数值设置太小会对存储空间有浪费。本参数可以在postgresql.conf或者server command line设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.11. Resource Usage / Background Writer

1.11.1. bgwriter_delay

参数名称

bgwriter_delay

参数值数据类型

integer

默认值

200

取值范围

10到10000

参数单位

若是不指定单位,那默认的单位是毫秒(ms)

参数含义

在每一轮循环中,background writer都会为一定数量的脏缓冲区发出写操作,然后background writer进行睡眠,睡眠的时间为bgwriter_delay参数值,然后再唤醒,然后重复。设置bgwriter_delay为不是10的倍数的值可能与将其设置为10的下一个更高的倍数具有相同的结果。本参数可以在postgresql.conf或者server command line设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.11.2. bgwriter_lru_maxpages

参数名称

bgwriter_lru_maxpages

参数值数据类型

integer

默认值

100

取值范围

0到1073741823

参数单位

参数含义

每轮bgwriter进程写入LRU Page的最大数量。本参数设置为零会禁用background writing行为,但是background writer进程依然会存在。本参数可以在postgresql.conf或者server command line设置

是否可session级修改

修改后何时生效

Reload即可

1.11.3. bgwriter_lru_multiplier

参数名称

bgwriter_lru_multiplier

参数值数据类型

real

默认值

2.0

取值范围

0到10

参数单位

参数含义

每轮写dirty buffer的数量基于服务器进程(即:backend process)在最近几轮中所需要的新buffer数量。最近的平均需要量乘以本参数值就是下一轮需要的新buffers数量的估计值。Dirty buffers会一直写入,直到有那么多干净的、可重用的buffers为止。因此,本参数值为1.0表示准确预计了需要的buffers数量。较大的本参数值提供了一些缓冲,以防需求激增,而较小的本参数值会有意将写dirty buffers操作留给服务器进程(即:backend process)完成。本参数可以在postgresql.conf或者server command line设置

是否可session级修改

修改后何时生效

Reload即可生效

1.11.4. bgwriter_flush_after

参数名称

bgwriter_flush_after

参数值数据类型

integer

默认值

Linux平台下是64,也就是512KB;其他平台下是0

取值范围

源码中BLCKSZ 符号常量为8KB时,取值范围是0到256;源码中BLCKSZ 符号常量不为8KB时,等比例计算即可。

参数单位

8KB

参数含义

当background writer写入的数据量超过本参数值之后,尝试强制操作系统发送这些写入的数据到底层存储中。这么做会限制kernel中page cache的dirty data的数量,减少在checkpoint末尾发生fsync时发生卡顿的可能性。本参数可以在postgresql.conf或者server command line设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.12. Statistics / Monitoring

1.12.1. log_statement_stats

参数名称

log_statement_stats

数据类型

bool

默认值

off

取值范围

off和on

参数单位

参数含义

在本参数设置为on的情况下,pg会向运行日志中写入系统性能统计信息。本参数on时,其他参数(log_parser_stats 、log_planner_stats、log_executor_stats)必须设置为off在本参数设置为on的情况下,当前台发出SQL语句时(如下以psql中执行select \* from pg_database为例子),在pg的运行日志中,会有如下的输出: 2021-03-31 09:55:21.621 CST,"pg131","postgres",8896,"[local]",6063d5a4.22c0,6,"",2021-03-31 09:51:32 CST,3/0,0,LOG,00000,"QUERY STATISTICS","! system usage stats: ! 0.000657 s user, 0.000000 s system, 0.000657 s elapsed ! [0.003464 s user, 0.001403 s system total] ! 6288 kB max resident size ! 0/8 [0/24] filesystem blocks in/out ! 0/128 [0/1295] page faults/reclaims, 0 [0] swaps ! 0 [0] signals rcvd, 0/0 [0/0] messages rcvd/sent! 0/0 [11/2] voluntary/involuntary context switches",,,,,"select \*from pg_database;",,,"psql","client backend"

是否可session级修改

修改后何时生效

Session级修改立即生效;非session级修改reload生效,仅仅superuser能修改本参数

1.12.2. log_parser_stats

参数名称

log_parser_stats

数据类型

bool

默认值

off

取值范围

off和on

参数单位

参数含义

在本参数设置为on的情况下,pg会向运行日志中写入解析统计信息。在本参数设置为on的情况下,log_statement_stats配置参数无法设置为on,设置为on时会有如下的错误: postgres=# alter system set log_statement_stats='on'; ERROR: invalid value for parameter "log_statement_stats": 1 DETAIL: Cannot enable "log_statement_stats" when "log_parser_stats", "log_planner_stats", or "log_executor_stats" is true. postgres=#在本参数设置为on的情况下,当前台发出SQL语句时(如下以psql中执行select \* from pg_database为例子),在pg的运行日志中,会有如下的输出: 2021-03-31 10:16:25.962 CST,"pg131","postgres",8896,"[local]",6063d5a4.22c0,41,"",2021-03-31 09:51:32 CST,3/3486,0,LOG,00000,"PARSER STATISTICS","! system usage stats: ! 0.000019 s user, 0.000000 s system, 0.000019 s elapsed ! [0.015481 s user, 0.001403 s system total] ! 7720 kB max resident size ! 0/0 [0/56] filesystem blocks in/out ! 0/0 [0/1673] page faults/reclaims, 0 [0] swaps ! 0 [0] signals rcvd, 0/0 [0/0] messages rcvd/sent ! 0/0 [39/6] voluntary/involuntary context switches",,,,,"select \* from pg_database;",,,"psql","client backend" 2021-03-31 10:16:25.962 CST,"pg131","postgres",8896,"[local]",6063d5a4.22c0,42,"",2021-03-31 09:51:32 CST,3/3486,0,LOG,00000,"statement: select \* from pg_database;",,,,,,,,,"psql","client backend" 2021-03-31 10:16:25.962 CST,"pg131","postgres",8896,"[local]",6063d5a4.22c0,43,"",2021-03-31 09:51:32 CST,3/3486,0,LOG,00000,"PARSE ANALYSIS STATISTICS","! system usage stats: ! 0.000031 s user, 0.000000 s system, 0.000030 s elapsed ! [0.015565 s user, 0.001403 s system total] ! 7720 kB max resident size ! 0/0 [0/56] filesystem blocks in/out ! 0/0 [0/1673] page faults/reclaims, 0 [0] swaps ! 0 [0] signals rcvd, 0/0 [0/0] messages rcvd/sent ! 0/0 [39/6] voluntary/involuntary context switches",,,,,"select \* from pg_database;",,,"psql","client backend" 2021-03-31 10:16:25.962 CST,"pg131","postgres",8896,"[local]",6063d5a4.22c0,44,"",2021-03-31 09:51:32 CST,3/3486,0,LOG,00000,"REWRITER STATISTICS","! system usage stats: ! 0.000003 s user, 0.000000 s system, 0.000003 s elapsed ! [0.015582 s user, 0.001403 s system total] ! 7720 kB max resident size ! 0/0 [0/56] filesystem blocks in/out ! 0/0 [0/1673] page faults/reclaims, 0 [0] swaps ! 0 [0] signals rcvd, 0/0 [0/0] messages rcvd/sent! 0/0 [39/6] voluntary/involuntary context switches",,,,,"select \* from pg_database;",,,"psql","client backend"

是否可session级修改

是,但是不能在log_statement_stats=on时设置本参数为on

修改后何时生效

Session级修改立即生效非session级修改reload生效,仅仅superuser能修改本参数

1.12.3. log_planner_stats

参数名称

log_planner_stats

参数值数据类型

boolean

默认值

off

取值范围

off和on

参数单位

参数含义

在本参数设置为on的情况下,pg会向运行日志中写入规划器统计信息。在本参数设置为on的情况下,log_statement_stats配置参数无法设置为on,设置为on时会有如下的错误: postgres=# alter system set log_statement_stats='on'; ERROR: invalid value for parameter "log_statement_stats": 1 DETAIL: Cannot enable "log_statement_stats" when "log_parser_stats", "log_planner_stats", or "log_executor_stats" is true. postgres=#在本参数设置为on的情况下,当前台发出SQL语句时(如下以psql中执行select \* from pg_database为例子),在pg的运行日志中,会有如下的输出: 2021-03-31 10:24:39.323 CST,"pg131","postgres",8896,"[local]",6063d5a4.22c0,63,"",2021-03-31 09:51:32 CST,3/3491,0,LOG,00000,"PLANNER STATISTICS","! system usage stats: ! 0.000041 s user, 0.000006 s system, 0.000045 s elapsed ! [0.017384 s user, 0.002173 s system total] ! 7740 kB max resident size ! 0/0 [0/80] filesystem blocks in/out ! 0/0 [0/1674] page faults/reclaims, 0 [0] swaps ! 0 [0] signals rcvd, 0/0 [0/0] messages rcvd/sent! 0/0 [55/10] voluntary/involuntary context switches",,,,,"select \* from pg_database;",,,"psql","client backend"

是否可session级修改

是,但是不能在log_statement_stats=on时设置本参数为on

修改后何时生效

Session级修改立即生效;非session级修改reload生效,仅仅superuser能修改本参数

1.12.4. log_executor_stats

参数名称

log_executor_stats

参数值数据类型

Bool

默认值

off

取值范围

off和on

参数单位

参数含义

在本参数设置为on的情况下,pg会向运行日志中写入执行器统计信息。在本参数设置为on的情况下,log_statement_stats配置参数无法设置为on,设置为on时会有如下的错误: postgres=# alter system set log_statement_stats='on'; ERROR: invalid value for parameter "log_statement_stats": 1 DETAIL: Cannot enable "log_statement_stats" when "log_parser_stats", "log_planner_stats", or "log_executor_stats" is true. postgres=#在本参数设置为on的情况下,当前台发出SQL语句时(如下以psql中执行select \* from pg_database为例子),在pg的运行日志中,会有如下的输出: 2021-03-31 10:27:59.858 CST,"pg131","postgres",8896,"[local]",6063d5a4.22c0,71,"",2021-03-31 09:51:32 CST,3/3496,0,LOG,00000,"EXECUTOR STATISTICS","! system usage stats: ! 0.000031 s user, 0.000000 s system, 0.000030 s elapsed ! [0.018581 s user, 0.003320 s system total] ! 7744 kB max resident size ! 0/0 [0/104] filesystem blocks in/out ! 0/0 [0/1676] page faults/reclaims, 0 [0] swaps ! 0 [0] signals rcvd, 0/0 [0/0] messages rcvd/sent! 0/0 [71/14] voluntary/involuntary context switches",,,,,"select \* from pg_database;",,,"psql","client backend"

是否可session级修改

是,但是不能在log_statement_stats=on时设置本参数为on

修改后何时生效

Session级修改立即生效非session级修改reload生效,仅仅superuser能修改本参数

1.13. Client Connection Defaults / Shared Library Preloading

1.13.1. jit_provider

参数名称

jit_provider

数据类型

string

默认值

llvmjit

取值范围

参数单位

参数含义

本参数值指定了jit provider library的名称,本参数仅仅可以在pg启动时设置。若是指定了不存在的library,则jit不可用,但是不会有报错抛出。

是否可session级修改

修改后何时生效

重启PG instance生效

1.13.2. local_preload_libraries

参数名称

local_preload_libraries

数据类型

string

默认值

空字符串

取值范围

参数单位

参数含义

本参数指定在连接启动时被预加载的一个或多个共享库。多个库名称以逗号分隔,其中每个库名的解释与load命令相同。库名之间的空格会被忽略,若是需要在库名中包括空格或者逗号,请用双引号将库名引起来。参数值仅仅在连接开始时生效,后续更改无效。如果找不到指定的库,则连接会将失败(即:连接将无法登陆到数据库中)。本参数任何user都可以设置。因此,被加载的共享库仅仅限于在$libdir/plugins目录下。数据库管理员有责任确保该目录下的共享库的安全性。本参数的参数值可以明确指定目录,比如$libdir/plugins/mylib,或者仅仅指定library名称,比如mylib,mylib的作用等同于$libdir/plugins/mylib本参数的目的是允许非授权用户加载debugging或者performance-measurement 库到特定session中,而无需load命令。为此,可以在客户端上使用设置了本参数的PGOPTIONS环境变量或者使用alter role set

是否可session级修改

修改后何时生效

Session级修改立即生效非session级修改reload生效

1.13.3. session_preload_libraries

参数名称

session_preload_libraries

数据类型

string

默认值

空字符串

取值范围

参数单位

参数含义

本参数值指定了在连接启动时被预加载的一个或者多个共享库。多个库名称以逗号分隔,其中每个库名的解释与load命令相同。库名之间的空格会被忽略,若是需要在库名中包括空格或者逗号,请用双引号将库名引起来。参数值仅仅在连接开始时生效,后续更改无效。如果找不到指定的库,则连接会将失败(即:连接将无法登陆到数据库中)。本参数的目的是允许加载debugging或者performance-measurement 库到特定session中,而无需load命令。比如,使用alter role set 语句设置本参数可以将auto_explain针对所有session生效。与shared_preload_libraries不同,在会话开始时(而不是在首次使用时)加载库没有太大的性能优势。但是,使用连接池时有一些优点。

是否可session级修改

可以,只有superuser可以改变本参数值

修改后何时生效

Session级修改立即生效非session级修改reload生效,reload之后,仅仅对新启动的session生效。

1.13.4. shared_preload_libraries

参数名称

shared_preload_libraries

数据类型

string

默认值

空字符串

取值范围

参数单位

参数含义

本参数值指定了在PostgreSQL数据库启动时被预加载的一个或者多个共享库。多个库名称以逗号分隔,其中每个库名的解释与load命令相同。库名之间的空格会被忽略,若是需要在库名中包括空格或者逗号,请用双引号将库名引起来。该参数只能在PostgreSQL数据库启动时设置,若是找不到指定的库,PostgreSQL数据库启动会失败。设置了本参数之后,新的backend process的启动时间会略有延长,即使这个backedn process不用这个共享库。因此,本参数推荐用于哪些在绝大多数session中使用的共享库。另外,由于本参数需要重启PostgreSQL数据库生效,因此,若是用于短期的debugging目的,请使用session_preload_libraries参数。请注意,在Windows主机上,在服务器启动时预加载库不会减少启动每个新服务器进程所需的时间。每个服务器进程将重新加载所有预加载库。但是,对于需要在postmaster启动时执行操作的库,本参数在windows主机上是很有用的。

是否可session级修改

修改后何时生效

重启PG instance生效

1.14. Lock Management

1.14.1. deadlock_timeout

参数名称

deadlock_timeout

数据类型

string

默认值

1000

取值范围

1到2147483647

参数单位

毫秒

参数含义

在检查是否存在deadlock条件之前,等待一个lock的时间长度。死锁检查是相对昂贵的,因此,pg不会在每次等待lock时都运行死锁检测。PostgreSQL会乐观的认为死锁在生产应用程序中并不常见,只需要等待一段时间后再检查死锁。这是您在实践中想要设置的最小值,在负载很重的pg中,可能需要提高本参数值。在理想情况下,本参数值应该超过典型的transaction 时间,以提高在PostgreSQL决定检查死锁之前将释放锁的几率。仅仅superuser可以修改本参数值。在log_lock_waits参数启用的情况下,deadlock_timeout参数值也决定了一个有关lock wait的 log message被写入运行日志之前的等待时间。如果你正在尝试调查锁定延迟(locking delays),你可能希望设置比正常deadlock_timeout参数值更短的时间。

是否可session级修改

是(仅仅superuser可修改)

修改后何时生效

Session级修改立即生效(仅仅superuser);非session级别修改Reload即可生效

1.14.2. max_locks_per_transaction

参数名称

max_locks_per_transaction

数据类型

integer

默认值

64

取值范围

10到2147483647

参数单位

参数含义

共享锁表(shared lock table)追踪max_locks_per_transaction \* (max_connections + max_prepared_transactions) 个lock objects,因此,一次只能锁定这么多不同的对象。本参数控制分配给每个事务的object lock的平均数量。单个事务可以锁定更多的对象,只要所有事务的锁都在锁表(lock table)中. 本参数值不是可以锁定的行数;可以锁定的行数是无限的。max_locks_per_transaction的默认值是64在历史上是被证明足够的,但是如果在多个事务中有涉及多个不同的表的SQL语句(比如一个有多个子表的父表的SQL语句),则可能提高该数值。本参数只能在PostgreSQL数据库启动时设置。当存在standby server时,standby server上的本参数值要大于或者等于master server上的本参数值,否则,查询语句在standby server上是不被允许的。

是否可session级修改

修改后何时生效

重启PG instance生效

1.14.3. max_pred_locks_per_transaction

参数名称

max_pred_locks_per_transaction

数据类型

Integer

默认值

64

取值范围

10到2147483647

参数单位

参数含义

共享谓词锁表(shared predicate lock table)追踪max_pred_locks_per_transaction \* (max_connections + max_prepared_transactions) 个lock objects,因此,一次只能锁定这么多不同的对象。本参数控制分配给每个事务的object lock的平均数量。单个事务可以锁定更多的对象,只要所有事务的锁都在锁表(lock table)中. 本参数值不是可以锁定的行数;可以锁定的行数是无限的。本参数默认值64在测试环境中是足够的,但是如果你的client在单个串行化事务中用到了多个不同的table,你可能需要加大本参数值。本参数只能在PostgreSQL数据库启动时设置。

是否可session级修改

修改后何时生效

重启PG instance生效

1.14.4. max_pred_locks_per_relation

参数名称

max_pred_locks_per_relation

数据类型

Integer

默认值

-2

取值范围

-2147483648到2147483647

参数单位

参数含义

本参数控制在将锁提升为覆盖整个relation之前,单个relation中能有多少pages或者tuples能被predicate-locked 。本参数值大于等于零时表示绝对限制,本参数值为负值时表示max_pred_locks_per_transaction/本参数值的绝对值。本参数可以在postgresql.conf设置也可以在server command line设置。

是否可session级修改

修改后何时生效

Reload生效

1.14.5. max_pred_locks_per_page

参数名称

max_pred_locks_per_page

数据类型

integer

默认值

2

取值范围

0到2147483647

参数单位

参数含义

本参数控制在将锁提升为覆盖整个page之前,单个page中能有多少tuples能被predicate-locked。本参数可以在postgresql.conf设置也可以在server command line设置。

是否可session级修改

修改后何时生效

Reload生效

1.15. Resource Usage / Cost-Based Vacuum Delay

1.15.1. vacuum_cost_delay

参数名称

vacuum_cost_delay

数据类型

Real

默认值

0,零代表禁用了基于成本的vacuum delay特性。

取值范围

0到100

参数单位

毫秒

参数含义

vacuum_cost_limit参数值是一个累积vacuum io操作的成本值,当vacuum操作达到vacuum_cost_limit参数值之后,vacuum操作会停下来休眠一段时间,该段时间是vacuum_cost_delay参数值指定的,然后,PostgreSQL会重置计数器并继续vacuum操作。本参数的参数值建议尽量小,大值是没有帮助的。

是否可session级修改

修改后何时生效

session修改会立即生效;非session级修改reload即可生效。

1.15.2. vacuum_cost_page_hit

参数名称

vacuum_cost_page_hit

数据类型

Integer

默认值

1

取值范围

0到10000

参数单位

参数含义

对shared buffer中发现的一个buffer进行vacuum的估计成本,本成本代表:锁定buffer pool的成本+查找shared hash table的成本+扫描page中内容的成本。

是否可session级修改

修改后何时生效

session修改会立即生效;非session级修改reload即可生效。

1.15.3. vacuum_cost_page_miss

参数名称

vacuum_cost_page_miss

数据类型

Integer

默认值

10

取值范围

0到10000

参数单位

参数含义

对不在shared buffer中的一个buffer(只能从disk读取)进行vacuum的估计成本,本成本代表:锁定buffer pool的成本+查找shared hash table的成本+从disk中读取该block到buffer的成本+扫描page中内容的成本。

是否可session级修改

修改后何时生效

session修改会立即生效;非session级修改reload即可生效。

1.15.4. vacuum_cost_page_dirty

参数名称

vacuum_cost_page_dirty

数据类型

Integer

默认值

20

取值范围

0到10000

参数单位

参数含义

Vacuum改变一个之前是干净的block的估计成本。本成本代表:额外的io操作以便将dirty block刷新到disk中。

是否可session级修改

修改后何时生效

session修改会立即生效;非session级修改reload即可生效。

1.15.5. vacuum_cost_limit

参数名称

vacuum_cost_limit

数据类型

Integer

默认值

200

取值范围

1到10000

参数单位

参数含义

本参数值是一个累积vacuum io操作的成本值,当vacuum操作达到本参数值之后,vacuum操作会停下来休眠一段时间。

是否可session级修改

修改后何时生效

session修改会立即生效;非session级修改reload即可生效。

1.16. Replication / Sending Servers

1.16.1. max_wal_senders

参数名称

max_wal_senders

数据类型

Integer

默认值

10

取值范围

0到262143,0表示复制被禁用

参数单位

参数含义

同时运行wal sender process的最大数量。运行wal sender process的场景包括流复制和以streaming模式进行base backup(译者注:其实还包括逻辑复制使用逻辑复制槽的场景,但是在PostgreSQL文档中并没有写明这一点)。本参数仅能在PostgreSQL启动时进行设置。配置参数waL_level必须设置为replica或者更高的值以便允许来自standby server的连接。在流复制环境中,在流复制备库上的该参数值至少要等于或者大于流复制主库上的该参数值,否则在备库上的query是不允许的。

是否可session级修改

修改后何时生效

重启PG instanc生效

1.16.2. max_replication_slots

参数名称

max_replication_slots

数据类型

Integer

默认值

10

取值范围

0到262143

参数单位

参数含义

设置PostgreSQL能支持的复制槽的最大数量,本参数仅能在PostgreSQL启动时进行设置。当本参数值小于当前已经存在的replicat slot时,会导致PG instance无法启动。配置参数waL_level必须设置为replica或者更高的值以便允许replication slot被用到。

是否可session级修改

修改后何时生效

重启PG instanc生效

1.16.3. wal_keep_size

参数名称

wal_keep_size

数据类型

Integer

默认值

0,0表示PostgreSQL不会为流复制环境保留额外的wal segments,

取值范围

0到2147483647

参数单位

MB,若是设置时不带单位,则默认为MB

参数含义

指定在pg_wal目录中保留的wal segment file的最小大小,以便流复制环境中的standby server 从主库中fetch wal file。如果连接到发送服务器的standby server超过本参数值的大小,发送服务器可能会删除掉standby server仍然需要的wal segments,此时,复制连接会终止,下游的连接最终也会因此失败,若是wal进行了归档,standby server可以从归档中进行fetch segments,以便恢复流复制。本参数值仅仅设置保留在pg_wal中的wal segments的最小大小。系统可能需要保留更多的wal segments以便进行wal 归档或者从检查点中恢复。本参数值仅仅在postgresql.conf中进行设置或者在server command line中进行设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.16.4. max_slot_wal_keep_size

参数名称

max_slot_wal_keep_size

数据类型

Integer

默认值

-1,-1表示复制槽保留不限数量的wal files。

取值范围

-1到2147483647

参数单位

MB

参数含义

用来指定复制槽保留pg_wal目录中wal file的最大大小。当一个复制槽的restart_lsn落后于current_lsn超过本参数值时,使用了复制槽的standby server不能再继续流复制,因为已经删除掉了需要的wal files

是否可session级修改

修改后何时生效

Reload即可生效

1.16.5. wal_sender_timeout

参数名称

wal_sender_timeout

数据类型

Integer

默认值

60000

取值范围

0到2147483647,0代表禁用timeout机制。

参数单位

毫秒,若是指定时不带单位,默认为为毫秒数

参数含义

当处于inactive状态多长时间(多长时间由本参数指定)之后,终止掉复制连接。这对于发送服务器检测standby crash或者网络中断很有用。当主备节点分布于不同的地理位置时,不同地理位置的节点使用不同的本参数值会带来管理上的灵活性。对于低延迟网络连接,较小的本参数值有助于快速的连接故障检测;对于地理位置较远的高延迟网络连接,较高的本参数值有助于判断standby server的健康状况。

是否可session级修改

修改后何时生效

Session修改立即生效,允许非superuser修改本参数值非session级修改reload生效。

1.17. Connections and Authentication / Authentication

1.17.1. authentication_timeout

参数名称

authentication_timeout

数据类型

Integer

默认值

60

取值范围

1到600

参数单位

秒,如果指定本参数值时不带单位,默认为秒

参数含义

允许完成连接认证的最长时间。如果客户端没有在本参数值指定的时间内完成连接认证,PostgreSQL数据库会关闭此次连接。本参数用于防止大量的客户端无限制的占用连接。本参数仅仅可以在postgresql.conf设置或者在server command line设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.17.2. password_encryption

参数名称

password_encryption

数据类型

enum

默认值

md5

取值范围

md5和scram-sha-256,写on也可以,on与md5有相同的作用。

参数单位

参数含义

本参数决定了create role或者alter role语句中指定的密码的加密算法。请注意,老的客户端版本不支持SCRAM-SHA-256密码加密算法,具体请见下面的描述。有两个关键的标准去确定是否支持SCRAM密码加密算法。 正在运行PostgreSQL 10及其更高版本 你用来连接到PostgreSQL数据库的驱动有SCRAM兼容性。PostgreSQL社区已经提供了一个驱动清单(https://wiki.postgresql.org/wiki/List_of_drivers#Drivers)如果您的系统满足上述两个标准,您可以使用SCRAM密码加密算法。请注意:要把现有的环境从md5升级到scram-sha-256,可以在确保所有在用的客户端已经足以支持SCRAM之后,在postgresql.conf中设置password_encryption = 'scram-sha-256',然后让所有用户设置新口令并且在pg_hba.conf中将认证方法说明改为scram-sha-256。

是否可session级修改

修改后何时生效

Session级修改立即生效;非session级修改reload生效

1.17.3. krb_server_keyfile

参数名称

krb_server_keyfile

数据类型

string

默认值

FILE:<sysconfdir>/krb5.keytab,注意,sysconfdir代表sysconfdir目录,该目录可以用pg_config --sysconfdir操作系统命令获得。

取值范围

参数单位

参数含义

设置服务器Kerberos key file的位置。如果本参数设置为空字符串(empty string),PostgreSQL会忽略这个空字符串,此时系统默认值会被使用。本参数值在postgresql.conf或者server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.17.4. krb_caseins_users

参数名称

krb_caseins_users

数据类型

bool

默认值

off,off代表大小写敏感

取值范围

参数单位

参数含义

本参数用于控制GSSAPI user names是否被视为大小写不敏感,本参数值仅能在postgresql.conf或者server command line中设置

是否可session级修改

修改后何时生效

Reload即可生效

1.17.5. db_user_namespace

参数名称

db_user_namespace

数据类型

bool

默认值

off

取值范围

off和on

参数单位

参数含义

若本参数值设置为on,那么创建的用户名的格式是username@dbname,当client传递username时,@符以及database name会被附加到username的末尾,并且PostgreSQL数据库查询用户是查找username@dbname这个格式的用户。当你在SQL环境中使用username@dbname这个格式的用户名时,请使用引号引起来username@dbname。当本参数值设置为on时,你依然可以建立普通的全局users,在客户端指定username时加上@即可,当PostgreSQL查找username之前,@符号会被去掉。
本参数会导致客户端和服务器端的用户名称表示方法不同。认证始终检查服务器端的username。因此,认证方法必须被配置为服务器端的username。因为md5密码加密算法在客户端和服务器端均使用username作为salt,因此,md5密码加密算法不能与本参数值一起使用。
本参数值仅能在postgresql.conf或者server command line中设置。请注意,本特性的目的是在一个完整的解决方案找到之前作为临时措施,到那时,本参数会被remove掉。

是否可session级修改

修改后何时生效

Reload即可生效

1.18. Statistics / Query and Index Statistics Collector

1.18.1. track_activities

参数名称

track_activities

数据类型

boolean

默认值

on

取值范围

on 和off

参数单位

参数含义

当设置为on时,当每个session中执行SQL语句或者命令时,PostgreSQL会收集信息(包括命令执行的时间信息)。收集的信息仅仅对superuser和执行命令所在session的owner可见。

是否可session级修改

是,仅限于superuser可进行session级修改

修改后何时生效

Session级修改立即生效;非session级修改reload生效

1.18.2. track_activity_query_size

参数名称

track_activity_query_size

数据类型

Integer

默认值

1024

取值范围

100到1048576

参数单位

Byte,当指定本参数不带单位时,默认是Bytes

参数含义

为每个active的session保留当前执行命令的文本的大小,该文本对应pg_stat_activity.query列。本参数仅仅能在PostgreSQL start时设置

是否可session级修改

修改后何时生效

重启PG instance生效

1.18.3. track_counts

参数名称

track_counts

数据类型

Bool

默认值

on

取值范围

on和off

参数单位

参数含义

当设置为on时,针对database activity收集统计信息。Autovacuum进程需要这些收集的信息。

是否可session级修改

是,仅限于superuser可进行session级修改

修改后何时生效

Session级修改立即生效;非session级修改reload生效

1.18.4. track_io_timing

参数名称

track_io_timing

数据类型

bool

默认值

off

取值范围

off和on

参数单位

参数含义

是否为database中的 io call/activity启用计时(即:io操作消耗了多少时间)。io计时信息体现在如下方面: pg_stat_database中 explain 带buffer时的输出中 pg_stat_statements中当设置为on时,PostgreSQL会重复查询操作系统的当前时间,这个可能会导致在某些平台下有大量开销。您可以使用pg_test_timing工具(该工具在bin目录下)来衡量系统的计时开销。仅superuser可以更改本参数值

是否可session级修改

是,仅限于superuser可进行session级修改

修改后何时生效

Session级修改立即生效非session级修改reload生效

1.18.5. track_functions

参数名称

track_functions

数据类型

enum

默认值

none,none的含义是禁用本功能

取值范围

none,pl,all

参数单位

参数含义

启用追踪函数调用计数和消耗的时间。参数值pl的含义是仅仅对procedural-language函数进行追踪,参数值all的含义是追踪SQL和C语言函数。仅superuser可以更改本参数值

是否可session级修改

是,仅限于superuser可进行session级修改

修改后何时生效

Session级修改立即生效;非session级修改reload生效

1.18.6. stats_temp_directory

参数名称

stats_temp_directory

数据类型

string

默认值

pg_stat_tmp

取值范围

参数单位

参数含义

本参数值用于指定存储临时统计信息的目录。本参数值可以是绝对路径,也可以是相对于data directory的相对路径本参数值指定为基于RAM的文件系统会减少物理IO并提升性能。本参数仅能在postgresql.conf中设置或者在server command line设置。

是否可session级修改

修改后何时生效

Reload生效

1.19. File Locations

1.19.1. data_directory

参数名称

data_directory

数据类型

string

默认值

取值范围

参数单位

参数含义

本参数值表示PostgreSQL的数据目录的位置

是否可session级修改

修改后何时生效

重启PG instance生效

1.19.2. config_file

参数名称

config_file

数据类型

string

默认值

在数据目录中

取值范围

参数单位

参数含义

本参数值指定了postgresql.conf的位置本参数值仅仅可以在postgres command line设置

是否可session级修改

修改后何时生效

重启PG instance生效

1.19.3. hba_file

参数名称

hba_file

数据类型

string

默认值

在数据目录中

取值范围

参数单位

参数含义

本参数值指定了pg_hba.conf的位置;本参数值仅仅可以在PostgreSQL启动时设置

是否可session级修改

修改后何时生效

重启PG instance生效

1.19.4. ident_file

参数名称

ident_file

数据类型

string

默认值

在数据目录中

取值范围

参数单位

参数含义

本参数值指定了pg_ident.conf的位置本参数值仅仅可以在PostgreSQL启动时设置

是否可session级修改

修改后何时生效

重启PG instance生效

1.19.5. external_pid_file

参数名称

external_pid_file

数据类型

string

默认值

空字符串

取值范围

参数单位

参数含义

指定了将postmaster的pid写入哪个文件本参数值仅仅可以在PostgreSQL启动时设置。 postgres=# alter system set external_pid_file='/home/pg131/postmasterpid.txt'; ALTER SYSTEM postgres=# exit [pg131@VM-0-8-centos ~]$ pg_ctl restart waiting for server to shut down…​. done server stopped waiting for server to start…​.2021-04-09 10:09:21.776 CST [5977] LOG: redirecting log output to logging collector process 2021-04-09 10:09:21.776 CST [5977] HINT: Future log output will appear in directory "log". done server started [pg131@VM-0-8-centos ~]$ cd [pg131@VM-0-8-centos ~]$ ll total 136260 -rw-rw-r-- 1 pg131 pg131 0 Mar 10 20:47 12345aa drwxrwxr-x 2 pg131 pg131 4096 Apr 9 10:09 archive drwx------ 20 pg131 pg131 4096 Apr 9 10:09 data -rw-rw-r-- 1 pg131 pg131 72 Mar 23 10:34 para.sql drwxrwxr-x 6 pg131 pg131 4096 Dec 20 14:32 postgresql-13.1 -rw-r—​r-- 1 pg131 pg131 139499520 Dec 20 14:07 postgresql-13.1.tar -rw-r—​r-- 1 pg131 pg131 5 Apr 9 10:09 postmasterpid.txt drwxrwxr-x 7 pg131 pg131 4096 Dec 20 14:45 soft drwx------ 3 pg131 pg131 4096 Dec 20 16:04 ts1 [pg131@VM-0-8-centos ~]$ cat postmasterpid.txt 5977 [pg131@VM-0-8-centos ~]$ pg_ctl status pg_ctl: server is running (PID: 5977) /home/pg131/soft/bin/postgres[pg131@VM-0-8-centos ~]$

是否可session级修改

修改后何时生效

重启PG instance生效

1.20. Reporting and Logging / When to Log

1.20.1. log_min_messages

参数名称

log_min_messages

数据类型

enum

默认值

warning

取值范围

debug5,debug4,debug3,debug2,debug1,info,notice,warning,error,log,fatal,panic

参数单位

参数含义

控制哪种message level写入系统日志。取值范围见上。在上面的取值范围中,前一个取值包括其后的取值。在上面的取值范围中,级别越在后边,写入系统日志中的messages就越少。注意: 本参数的参数值log的级别与client_min_messages配置参数的参数值log的级别不同。仅允许superuser可以修改本参数值。

是否可session级修改

是,此时仅限于superuser在session级别修改

修改后何时生效

Session级别修改立即生效;其他级别修改reload生效

1.20.2. log_min_error_statement

参数名称

log_min_error_statement

数据类型

enum

默认值

error,表示那些导致了errors、log messages、fatal errors、panics的SQL语句会被记录到日志中。

取值范围

debug5,debug4,debug3,debug2,debug1,info,notice,warning,error,log,fatal,panic

参数单位

参数含义

控制导致何种级别错误的SQL语句内容被记录到日志中。为了关闭对错误SQL语句的记录,请设置被参数值为panic仅允许superuser可以修改本参数值。

是否可session级修改

是,此时仅限于superuser在session级别修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.20.3. log_min_duration_statement

参数名称

log_min_duration_statement

数据类型

integer

默认值

-1,-1表示禁用本功能。

取值范围

-1到2147483647

参数单位

毫秒,若是不指定单位的话。

参数含义

所有运行超过本参数值的SQL语句会打印到系统日志中。本参数对追踪未优化的SQL语句有很大帮助。本参数值为零表示打印所有的SQL语句。仅允许superuser可以修改本参数值。本参数会覆盖log_min_duration_sample参数,这意味持续时间超过本参数值的SQL语句将不进行采样,而是始终记录下来。对于使用扩展查询协议的客户端,Parse、Bind、Execute阶段会被各自独立记录下来。本参数与log_statement参数合用时,由于log_statement参数起作用而记录到log中的SQL文本不会被重复记录。在不使用syslog时,推荐使用log_line_prefix参数,以便记录PID或者Session ID。

是否可session级修改

是,此时仅限于superuser在session级别修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.20.4. log_min_duration_sample

参数名称

log_min_duration_sample

数据类型

Integer

默认值

-1,-1表示禁用本功能。

取值范围

-1到2147483647,参数值为零时,记录所有语句的sample

参数单位

毫秒

参数含义

举例说明,如果本参数值设置为100ms,那么运行时间超过100ms的SQL语句会被考虑进行采样。仅允许superuser可以修改本参数值。当流量太大而无法记录所有查询时,启用此参数会很有帮助。本参数的优先级比log_min_duration_statement参数优先级要低。这意味着持续时间超过log_min_duration_statement参数值的SQL语句不受采样限制,并且总是被记录下来。

是否可session级修改

是,此时仅限于superuser在session级别修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.20.5. log_statement_sample_rate

参数名称

log_statement_sample_rate

数据类型

Real

默认值

1

取值范围

0到1

参数单位

参数含义

确定将记录的持续时间超过log_min_duration_sample参数值的的语句的比率。例如0.5意味着统计上每两个给定语句中就有一个被记录的机会。默认值为1.0,意味着记录所有采样语句。本参数值设置为0表示禁用sampled statement-duration logging。仅允许superuser可以修改本参数值。

是否可session级修改

是,此时仅限于superuser在session级别修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.20.6. log_transaction_sample_rate

参数名称

log_transaction_sample_rate

数据类型

Real

默认值

0,参数值为0表示不记录任何其他事务的语句

取值范围

0到1,参数值为1表示记录所有事物的所有语句

参数单位

参数含义

设置除其他原因记录的语句之外,所有记录语句的事务的百分比,本参数适用于每个新事务,而不考虑其语句的持续时间。采样是随机的,例如0.1意味着在统计上,每十个交易中有一个机会记录任何给定的事务。本参数值有助于构建一个事务的采样。仅允许superuser可以修改本参数值。另外请注意:与所有statement-logging选项一样,本参数会显著增加系统负载。

是否可session级修改

是,此时仅限于superuser在session级别修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.21. Checkpoints

1.21.1. checkpoint_timeout

参数名称

checkpoint_timeout

数据类型

Integer

默认值

300

取值范围

30到86400

参数单位

参数含义

设置两次automatic WAL checkpoints的时间间隔。增加本参数值会导致进行crash recovery的时间长度增大。本参数值仅能在postgresql.conf设置或者在server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.21.2. checkpoint_completion_target

参数名称

checkpoint_completion_target

数据类型

Real

默认值

0.5

取值范围

0到1

参数单位

参数含义

指定了checkpoint 完成的目标,即:checkpoint需要在checkpoint_timeout\* checkpoint_completion_target的时间长度内完成。本参数值仅能在postgresql.conf设置或者在server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.21.3. checkpoint_flush_after

参数名称

checkpoint_flush_after

数据类型

Integer

默认值

32,注意:linux平台下本参数默认值为32,Windows平台下本参数默认值为0

取值范围

0到256,如果BLCKSZ符号常量值不是8KB,请根据比例进行修改。

参数单位

8KB,若是指定参数值时不带单位,默认是BLCKSZ bytes,在不修改BLCKSZ符号常量值的情况下,该符号常量值为8KB。

参数含义

每当在执行检查点时写入的数据量超过本参数值时,会尝试强制操作系统向底层存储发出这些写入操作。这样会限制kernel page cache中dirty data的总量,减少了在checkpoint的末尾发出fsync命令时,或者当操作系统在后台以更大的批写入数据时,PostgreSQL暂停的可能性。这通常会大大减少事务延迟,但也有一些情况,特别是在工作负载大于shared_buffers,但小于操作系统page cache的情况下,性能可能会降低。本参数值仅可以在postgresql.conf中设置或者在server command line进行设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.21.4. checkpoint_warning

参数名称

checkpoint_warning

数据类型

integer

默认值

30

取值范围

0到2147483647,0会禁用warning。

参数单位

秒。若是指定本参数值不带单位,默认是秒

参数含义

如果由于填充WAL段文件而导致的检查点发生的时间间隔比本参数值更小(这表明应该加大max_wal_size配置参数值),则向服务器日志写入一条消息。当checkpoint_timeout参数值小于checkpoint_warning参数值时,warning不会产生。本参数值仅可以在postgresql.conf中设置或者在server command line进行设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.21.5. max_wal_size

参数名称

max_wal_size

数据类型

Integer

默认值

1024

取值范围

2到2147483647

参数单位

MB

参数含义

触发automatic checkpoints的最大wal 大小。这是软限制,wal size可以在如下情况下超过本参数值的限制:重负载,失败的archive_command命令,以及高的wal_keep_size参数值设置。增加本参数值会导致进行crash recovery的时间长度增大。本参数值仅能在postgresql.conf设置或者在server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.21.6. min_wal_size

参数名称

min_wal_size

数据类型

Integer

默认值

80

取值范围

2到2147483647

参数单位

MB

参数含义

只要WAL Disk的使用低于本参数值,旧的wal文件总是在checkpoint发生时被循环使用,而不是删除wal文件。这可以用来确保保留足够的WAL空间来处理WAL使用中的峰值,例如在运行大型批处理作业时。此参数只能在postgresql.conf文件文件或在server command line上。

是否可session级修改

修改后何时生效

Reload即可生效

1.22. dynamic_library_path

参数名称

dynamic_library_path

数据类型

string

默认值

$libdir, $libdir代表的绝对路径请见pg_config --pkglibdir命令的输出

取值范围

参数单位

参数含义

如果需要打开可动态加载的模块,并且create function 或LOAD命令中指定的文件名没有目录组件(即名称不包含斜杠),系统将在该路径中搜索所需的文件。本参数值必须是由冒号分隔(针对Linux平台)或者分号分隔(针对Windows平台)的绝对路径列表。如果本参数值以特殊字符串$libdir开头,那么编译后的PostgreSQL package library directory会取代$libdir, PostgreSQL package library directory请见pg_config --pkglibdir命令的结果。若是本参数值被设置为空字符串,表示自动path search功能会被关闭。superuser可以在运行时更改此参数,但这样做的设置只会持续到客户端连接结束,因此应将此方法保留用于开发目的。

是否可session级修改

是,此时仅限于superuser在session级别修改。

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.23. gin_fuzzy_search_limit

参数名称

gin_fuzzy_search_limit

数据类型

integer

默认值

0,0表示无限制

取值范围

0到2147483647

参数单位

参数含义

GIN索引扫描返回的结果集大小的软上限。开发GIN索引的主要目的是在PostgreSQL中创建对高度可伸缩的全文搜索的支持,而且通常情况下,全文搜索会返回非常大的结果集。此外,当查询包含非常频繁的单词时,这种情况经常发生,因此大的结果集甚至没有用处。因为从磁盘读取许多元组并对它们进行排序可能需要花费大量时间,这对于生产来说是不可接受的。(请注意,索引搜索本身非常快。)为了便于此类查询的受控执行,GIN对返回的行数有一个可配置的软上限,这就是gin_fuzzy_search_limit配置参数。默认设置为0(表示无限制)。如果设置了非零限制,则返回的集是随机选择的整个结果集的子集。"软"意味着返回结果的实际数量可能与指定的限制有所不同,这取决于查询和系统随机数生成器的质量。从经验来看,以千为单位的本参数值(例如,5000-20000)工作正常。

是否可session级修改

修改后何时生效

Reload生效

1.24. tcp_keepalives_count

参数名称

tcp_keepalives_count

数据类型

默认值

0,0表示取操作系统的默认值,

取值范围

0到2147483647

参数单位

参数含义

指定在服务器与客户端的连接被视为已断开之前可以被丢弃的TCP keepalive messages.在一个基于Unix-domain socket的session中,本参数会被忽略,此时本参数值被视为零。本参数在Windows操作系统上不被支持,因此,在Windows操作系统上,本参数值必须为0。本参数仅仅支持符合如下条件的操作系统:那些支持TCP_KEEPCNT或者等价socket option的操作系统。

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.25. tcp_keepalives_idle

参数名称

tcp_keepalives_idle

数据类型

integer

默认值

0,0表示取操作系统的默认值

取值范围

0到2147483647

参数单位

参数含义

指定在没有网络活动的情况下,经过多长时间之后,操作系统应该向Client端发送TCP keepalive message.本参数仅仅支持符合如下条件的操作系统:那些支持TCP_KEEPIDLE或者等价socket option的操作系统。因此,在Windows以及其他操作系统中,本参数值必须为0,在一个基于Unix-domain socket的session中,本参数会被忽略,此时本参数值被视为0。在Windows操作系统上,本参数值为0时,本参数值将会被视为2小时,因为,Windows不提供读取系统默认值的方法。

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.26. tcp_keepalives_interval

参数名称

tcp_keepalives_interval

数据类型

Integer

默认值

0,0表示取操作系统的默认值

取值范围

0到2147483647

参数单位

参数含义

指定TCP keepalive message重传的时间间隔。本参数仅仅支持符合如下条件的操作系统:那些支持TCP_KEEPINTVL或者等价socket option的操作系统。因此,在Windows以及其他操作系统中,本参数值必须为零,在一个基于Unix-domain socket的session中,本参数会被忽略,此时本参数值被视为零。在Windows操作系统上,本参数值为零时,本参数值将会被视为1秒,因为,Windows不提供读取系统默认值的方法。

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.27. tcp_user_timeout

参数名称

tcp_user_timeout

数据类型

Integer

默认值

0,0表示取操作系统的默认值

取值范围

0到2147483647

参数单位

毫秒

参数含义

指定在强制关闭TCP连接之前,传输的数据可能保持未确认状态的时间长度本参数仅仅支持符合如下条件的操作系统:那些支持TCP_USER_TIMEOUT或者等价socket option的操作系统。因此,在其他操作系统中,本参数值必须为零,在一个基于Unix-domain socket的session中,本参数会被忽略,此时本参数值被视为零。在Windows操作系统上,本参数不受支持,此时本参数值必须设置为零。

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.28. Query Tuning / Genetic Query Optimizer

1.28.1. geqo

参数名称

geqo

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

启用或者禁用genetic query optimization,生产环境中不应该将本参数设置为off。配置参数geqo_threshold提供了对GEQO更细粒度的控制。遗传查询优化器(GEQO)是一种使用启发式搜索进行查询计划的算法。这减少了用于复杂查询(那些包含许多关系的查询)的计划时间,但所产生的计划的成本有时不如普通穷举搜索算法所找到的计划。

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.28.2. geqo_threshold

参数名称

geqo_threshold

数据类型

integer

默认值

12

取值范围

2到2147483647

参数单位

参数含义

本参数是启用geqo的阈值,即:当from之后的关系数量至少有本参数值指定的个数时,才启用geqo。注意一个FULL OUTER JOIN只被计为一个FROM项。对于简单的SQL语句,通常最好使用常规的穷举搜索planner,但是对于具有许多表的查询,穷举搜索花费的时间太长,通常比执行次优计划的代价要长,因此,本阈值是管理geqo的一种方法。

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.28.3. geqo_effort

参数名称

geqo_effort

数据类型

Integer

默认值

5

取值范围

1到10

参数单位

参数含义

控制GEQO中计划时间和查询计划质量之间的权衡。此变量必须是1到10之间的整数。默认值为5。较大的值会增加生成查询计划所花费的时间,但也会增加选择高效查询计划的可能性。本参数实际上并不直接做任何事情;它只用于计算影响geqo行为的其他变量的默认值。如果愿意,可以手动设置其他参数。

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.28.4. geqo_pool_size

参数名称

geqo_pool_size

数据类型

Integer

默认值

0,0表示PostgreSQL会根据SQL语句中表的数量以及geqo_effort参数值选择一个合适的值。

取值范围

0到2147483647

参数单位

参数含义

控制GEQO使用的pool size,即:遗传群体中的个体数,至少是2,有用的值通常是100到1000. 参数值为0表示PostgreSQL会根据SQL语句中表的数量以及geqo_effort参数值选择一个合适的值。

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.28.5. geqo_generations

参数名称

geqo_generations

数据类型

Integer

默认值

0

取值范围

0到2147483647

参数单位

参数含义

控制GEQO使用的generations,即算法的迭代次数。它必须至少是一个,并且有用的值通常是100到1000。如果设置为零(默认设置),则PostgreSQL会根据geqo_pool_size选择合适的值。

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.28.6. geqo_selection_bias

参数名称

geqo_selection_bias

数据类型

real

默认值

2

取值范围

1.5到2

参数单位

参数含义

控制GEQO使用的选择偏差。选择偏差是population内部的选择压力

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.28.7. geqo_seed

参数名称

geqo_seed

数据类型

real

默认值

0

取值范围

0到1

参数单位

参数含义

控制GEQO用于通过连接顺序搜索空间选择随机路径的随机数生成器的初始值,更改该值将更改所探索的连接路径集。并可能导致找到更好或更差的最佳路径

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.29. Write-Ahead Log / Recovery Target

1.29.1. recovery_target

参数名称

recovery_target

数据类型

string

默认值

空串

取值范围

immediate

参数单位

参数含义

此参数指定恢复应在达到一致状态后尽快结束,即尽早结束。从联机备份还原时,这意味着在备份结束的时间点结束恢复。

是否可session级修改

修改后何时生效

本参数不支持修改。

1.29.2. recovery_target_name

参数名称

recovery_target_name

数据类型

string

默认值

空串

取值范围

参数单位

参数含义

此参数指定将继续恢复(recovery)到的命名还原点,该还原点由函数pg_create_restore_point()创建。

是否可session级修改

修改后何时生效

重启PG Instance生效

1.29.3. recovery_target_time

参数名称

recovery_target_time

数据类型

string

默认值

空串

取值范围

参数单位

参数含义

此参数指定将继续恢复(recovery)到的time stamp,精确的停止点受到recovery_target_inclusive配置参数影响。此参数的值是一个时间戳,其格式与timestamp with time zone数据类型所接受的格式相同,只是您不能使用时区缩写(除非在配置文件的前面设置了timezone_abbreviations变量)。首选样式是使用UTC的数字偏移量,或者您可以编写完整的时区名称,例如,Europe/Helsinki,而不是EEST

是否可session级修改

修改后何时生效

重启PG Instance生效

1.29.4. recovery_target_xid

参数名称

recovery_target_xid

数据类型

string

默认值

取值范围

参数单位

参数含义

此参数指定将继续恢复(recovery)到的trasaction ID。请记住,虽然事务ID在事务开始时按顺序分配,但事务可以按不同的数字顺序完成。要恢复的事务是在指定事务之前提交的事务(也可以选择包括指定事务),精确的停止点受到recovery_target_inclusive配置参数影响。

是否可session级修改

修改后何时生效

重启PG Instance生效

1.29.5. recovery_target_lsn

参数名称

recovery_target_lsn

数据类型

string

默认值

空串

取值范围

参数单位

参数含义

此参数指定将继续恢复(recovery)到的LSN,精确的停止点受到recovery_target_inclusive配置参数影响。本参数使用系统数据类型pg_lsn解析。

是否可session级修改

修改后何时生效

重启PG Instance生效

1.29.6. recovery_target_inclusive

参数名称

recovery_target_inclusive

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

当本参数设置为on时指定到达指定的recovery target之后停止当本参数设置为off时指定到达指定的recovery target之前停止本参数与如下参数配合使用:recovery_target_lsn、recovery_target_time、recovery_target_xid。本参数控制含有精确recovery target(恢复目标)的LSN、commit time、或者trasaction id是否被包括恢复(recovery)之内。

是否可session级修改

修改后何时生效

重启PG Instance生效

1.29.7. recovery_target_timeline

参数名称

recovery_target_timeline

数据类型

string

默认值

latest

取值范围

参数单位

参数含义

指定recovery进入一个特定的timeline,本参数值可以是一个数字的timeline id或者一个特定的值,值current的含义:recover到做base backup时的那个timeline;值latest表示recover到在archive 中找到的最新的timeline,值latest适用于standby server。您通常只需要在复杂的重新恢复情况下设置本参数,在这种情况下,您需要返回到在时间点恢复之后达到的状态。

是否可session级修改

修改后何时生效

重启PG Instance生效

1.29.8. recovery_target_action

参数名称

recovery_target_action

数据类型

enum

默认值

pause

取值范围

pause,promote,shutdown

参数单位

参数含义

指定了一旦达到recovery target,PostgreSQL该采取的操作。默认值pause表示恢复暂停(pause),值promote表示恢复过程完成并且PostgreSQL将会启动以接受外部连接,值shutdown表示在达到recovery target之后会stop PostgreSQL。pause值的预期用途是允许对数据库执行查询,以检查此恢复目标是否是最理想的恢复点,pg_wal_replay_resume()函数表示paused state resumed,这意味着恢复走到了终点。若是recovery target不是期望的那个stopping point,那么请关闭PostgreSQL,改变recovery target到更为之后的一个target,然后重启recovery即可。

是否可session级修改

修改后何时生效

重启PG Instance生效

1.30. Query Tuning / Other Planner Options

1.30.1. default_statistics_target

参数名称

default_statistics_target

数据类型

integer

默认值

100

取值范围

1到10000

参数单位

参数含义

为没有通过ALTER TABLE SET STATISTICS设置column-specific target的表列设置默认统计目标。较大的本参数值会增加analyze的时间,但也会提升planner估计的质量。

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.30.2. constraint_exclusion

参数名称

constraint_exclusion

数据类型

enum

默认值

partition

取值范围

partition,on,off on表示检查所有表的约束 off表示不检查约束partition表示仅仅对继承的子表以及union all子查询检查约束。

参数单位

参数含义

控制planner是否使用constraints优化查询,如果表的约束保证没有与查询匹配的行,table scan会被跳过。本参数经常与传统的继承树一起使用以提高性能,比如如下的例子: 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这个表。目前,默认情况下仅对经常用于通过继承树实现表分区的情况启用约束排除。为所有表启用它会带来额外的计划开销,这在简单查询中非常明显,而且对于简单查询通常不会产生任何好处。如果没有使用传统继承进行分区的表,则可能希望完全关闭它。(请注意,分区表的等效功能由单独的配置参数enable_partition_pruning控制。)

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.30.3. cursor_tuple_fraction

参数名称

cursor_tuple_fraction

数据类型

real

默认值

0.1

取值范围

0到1

参数单位

参数含义

设置planner’s估计,本参数设置较少的值时,会使planner倾向于对cursors使用"fast start" plan,这会快速的检索前几行,而获取所有行可能需要很长时间。较大的值更强调总的估计时间。在最大设置为1.0时,游标的规划与常规查询完全相同,只考虑总的估计时间,而不考虑第一行的交付时间。

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.30.4. from_collapse_limit

参数名称

from_collapse_limit

数据类型

integer

默认值

8

取值范围

1到2147483647

参数单位

参数含义

如果生成的FROM列表包含的项目不超过本参数值,那么planner将会把子查询合并到上面的查询中。较小的值会减少计划时间,但可能会产生较差的查询计划。设置本参数值为geqo_threshold参数值或者更大可能会触发GEQO Planner的使用,进而导致非优化的执行计划。

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.30.5. jit

参数名称

jit

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

确定jit编译是否被PostgreSQL使用。

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.30.6. join_collapse_limit

参数名称

join_collapse_limit

数据类型

integer

默认值

8

取值范围

1到2147483647

参数单位

参数含义

每当生成的items列表不超过本参数值时,planner就会将explicit join结构(FULL JOINs除外)重写为FROM items列表。较小的值会减少计划时间,但可能会产生较差的查询计划.默认情况下,此参数值设置为与from_collapse_limit参数值相同,这适用于大多数用途。将其设置为1可防止explicit join的任何重新排序。因此,查询中指定的显式连接顺序将是连接关系的实际顺序。因为查询规划器并不总是选择最佳的连接顺序,所以高级用户可以选择将此参数值临时设置为1,然后显式指定所需的连接顺序。设置本参数值为geqo_threshold参数值或者更大可能会触发GEQO Planner的使用,进而导致非优化的执行计划。

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.30.7. parallel_leader_participation

参数名称

parallel_leader_participation

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

允许leader进程在Gather和Gather Merge node下执行查询计划,而不是等待worker进程。将此值设置为off可降低worker进程被阻塞的可能性,因为leader进程读取元组的速度不够快,但需要leader进程等待工作进程启动,然后才能生成第一个元组。Leader进程能够帮助或阻碍性能的程度取决于计划类型、worker数量和查询持续时间。

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.30.8. force_parallel_mode

参数名称

force_parallel_mode

数据类型

enum

默认值

off

取值范围

off,on,regress off表示仅仅当预期能提升性能时,才使用parallel mode on表示对被视为safe的查询语句强制使用并行查询。regress表示除了有本参数值设置为"on"的相同的所有效果之外,还有一些旨在促进自动回归测试的附加效果

参数单位

参数含义

是否使用parallel query功能。更具体地说,将此值设置为on将在任何查询计划的顶部添加一个Gather节点,这看起来是安全的,因此查询在并行worker进程中运行,即使并行worker进程不可用或无法使用,也将禁止在并行查询上下文中禁止的操作(如启动子事务),除非planner认为这将导致查询失败,如果设置此选项时出现故障或意外结果,则查询使用的某些函数可能需要标记为PARALLEL UNSAFE(或者,可能是PARALLEL RESTRICTED)通常,来自并行worker进程的消息包含一个context line,但是设置为regress会抑制该context line,以便输出与非并行执行中的输出相同。此外,通过此设置,添加到计划中的Gather nodes将隐藏在EXPLAIN的输出中,以便当本参数值设置为off时,输出与获得的结果相匹配。

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.30.9. plan_cache_mode

参数名称

plan_cache_mode

数据类型

enum

默认值

auto

取值范围

auto,force_generic_plan,force_custom_plan

参数单位

参数含义

可以使用自定义或generic的plan执行prepared statements(explicitly prepared或implicitly generated,例如通过PL/pgSQL),针对每一次的执行,自定义plan使用特定的一组参数值被重新生成,generic plans不依赖本plan_cache_mode参数值,可以被多次的执行重复使用。此外,使用generic plans会节省 planning time,但是,如果理想的plan强烈依靠本参数,那么,generic plan可能效率低下。这些选项之间的选择通常是自动进行的,但它可以被plan_cache_mode配置参数覆盖。在执行缓存的计划时,而不是在准备计划时,会考虑本参数值

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.31. Version and Platform Compatibility / Previous PostgreSQL Versions

1.31.1. array_nulls

参数名称

array_nulls

数据类型

bool

默认值

on,本参数值为on时表示允许输入包括NULL的数组值

取值范围

on和off

参数单位

参数含义

本参数控制数组输入解析器是否将未加引号的NULL识别为指定NULL数组元素。8.2版本之前的PostgreSQL不支持数组中的null值,因此将null视为使用字符串值"null"指定普通数组元素。为了向后兼容需要旧行为的应用程序,可以关闭此参数。请注意,即使本参数值是off,也可以创建包含NULL的数组值

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.31.2. backslash_quote

参数名称

backslash_quote

数据类型

enum

默认值

safe_encoding

取值范围

safe_encoding,on,off on表示始终允许\' off表示始终拒绝'safe_encoding表示仅当客户端编码不允许在多字节字符中使用ASCII\时才允许.

参数单位

参数含义

本参数用于设置字符串的引用符是否是'符号。SQL标准中是'',而PostgreSQL历史上也接受了'符号,但是,使用'会带来安全风险,这是因为,在一些客户端字符集编码中,存在多字节字符,其中最后一个字节在数字上等同于ASCII \.如果客户端没有正确的转义,那么SQL注入攻击是可能的。这种风险可以通过使PostgreSQL数据库拒绝引用符被backslash反斜杠转义的查询来防止。请注意,在标准一致性字符串文本中,无论如何,\仅仅表示\。此参数仅影响对非标准一致性文本的处理,包括转义字符串语法(E'…')

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.31.3. escape_string_warning

参数名称

escape_string_warning

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

当设置为on时,表示当\出现在一个普通的字符串('…'这样的)中并且standard_conforming_strings参数值为off时,一个warning会发出。希望使用反斜杠作为转义的应用程序应该修改为使用转义字符串语法(E'…'). 因为根据SQL标准,普通字符串的默认行为现在是将反斜杠视为普通字符. 可以启用本参数来帮助定位需要更改的代码

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.31.4. lo_compat_privileges

参数名称

lo_compat_privileges

数据类型

bool

默认值

off

取值范围

参数单位

参数含义

对large object,为权限检查启用面向backward的兼容性模式。在PostgreSQL9.0之前,large object并不具有访问权限,因此,large object总是能被所有的user进行读和写。设置本参数值为on将会禁用新权限的检查,这会与PostgreSQL9.0之前的版本保持兼容。

是否可session级修改

是,仅限于superuser进行修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.31.5. operator_precedence_warning

参数名称

operator_precedence_warning

数据类型

bool

默认值

off

取值范围

on和off

参数单位

参数含义

启用此选项后,解析器将对自PostgreSQL 9.4以来由于运算符优先级的更改而可能已更改含义的任何构造发出警告。对于审核应用程序以查看优先级更改是否破坏了任何内容非常有用;但这并不意味着在生产环境中保持打开状态,因为它将警告某些完全有效、符合标准的SQL代码

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.31.6. quote_all_identifiers

参数名称

quote_all_identifiers

数据类型

bool

默认值

off

取值范围

on和off

参数单位

参数含义

当数据库生成SQL语句时,即使标识符不是关键字,也会将标识符引用起来。这会影响explain的输出以及诸如pg_get_viewdef函数的结果,比如下面的例子: postgres=# select pg_get_viewdef('company_view'); -[RECORD 1]--+-------------------- pg_get_viewdef

SELECT company.id,+

company.name,

company.age

FROM company;
postgres=# set quote_all_identifiers=on; SET postgres=# select pg_get_viewdef('company_view'); -[RECORD 1]--+------------------------ pg_get_viewdef

SELECT "company"."id",+

"company"."name",

"company"."age"

FROM "company";
postgres=#

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.31.7. standard_conforming_strings

参数名称

standard_conforming_strings

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

本参数控制普通字符串文本('…')是否按SQL标准中的指定按字面含义处理反斜杠.从PostgreSQL9.1开始,默认值为on。此参数的存在也可以被视为表示支持转义字符串语法(E'…')如果应用程序希望反斜杠被视为转义字符,则应使用转义字符串语法

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.31.8. synchronize_seqscans

参数名称

synchronize_seqscans

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

这允许对大表的顺序扫描彼此同步,以便并发扫描在大约相同的时间读取相同的块,从而共享I/O工作负载。启用本参数后,扫描可能从表的中间开始,然后"环绕"结尾以覆盖所有行,以便与正在进行的扫描活动同步。这可能导致没有ORDERBY子句的查询返回的行顺序发生不可预知的更改。将此参数设置为off可确保与PostgreSQL 8.3之前的行为,即顺序扫描始终从表的开头开始

是否可session级修改

修改后何时生效

Session级别修改立即生效,其他级别修改reload生效

1.32. Connections and Authentication / Connection Settings

1.32.1. listen_addresses

参数名称

listen_addresses

数据类型

string

默认值

localhost

取值范围

参数单位

参数含义

设置数据库服务器监听的hostname或者IP地址,监听多个hostname或者IP地址时,请用逗号隔开。 \*号表示监听所有可用的IP地址, 0:0:0:0监听代表所有IPV4的地址, ::代表监听所有IPV6的地址。当本参数值为空时,PostgreSQL不会监听任何的IP,此时,只有Unix-domain sockets才可以用于连接到数据库中。本参数控制哪些IP地址上接受连接尝试,这可以帮助防止在不安全的IP地址上重复出现恶意连接请求。该参数只能在PostgreSQL启动时设置。

是否可session级修改

修改后何时生效

重启PG instance生效

1.32.2. port

参数名称

port

数据类型

integer

默认值

5432

取值范围

1到65535

参数单位

参数含义

PostgreSQL监听的TCP端口。请注意,PostgreSQL监听的所有IP地址都使用相同的端口号,本参数只能在PostgreSQL启动时设置。

是否可session级修改

修改后何时生效

重启PG instance生效

1.32.3. max_connections

参数名称

max_connections

数据类型

integer

默认值

100

取值范围

1到262143

参数单位

参数含义

本参数值指定了PostgreSQL数据库的最大连接数。本参数只能在PostgreSQL启动时设置。在流复制备库上,必须将本参数值设置为与主库相同或者比主库参数值大,否则,后备服务器将不允许查询操作。

是否可session级修改

修改后何时生效

重启PG instance生效

1.32.4. superuser_reserved_connections

参数名称

superuser_reserved_connections

数据类型

integer

默认值

3

取值范围

0到262143

参数单位

参数含义

为superusers保留的connection "slots"的数量,当PostgreSQL的活跃的并发连接的数量等于max_connections参数值减去superuser_reserved_connections参数值之后,仅仅可以面向superuser建立新的连接,并且,replication connection也是建立不了的。本参数只能在PostgreSQL启动时设置。

是否可session级修改

修改后何时生效

重启PG instance生效

1.32.5. unix_socket_directories

参数名称

unix_socket_directories

数据类型

string

默认值

在Linux中默认值为/tmp;在Windows中默认值为空

取值范围

参数单位

参数含义

本参数指定了PostgreSQL监听客户端连接的Unix-domain socket(s)目录,多个目录可以用逗号隔开,两个目录之间的空格会被忽略,如果你想在目录名中包括逗号或者空格,请使用双引号引起来。本参数值为空时表示不监听任何的Unix-domain socket(s)目录,这意味着只有TCP/IP sockets可以被用来连接到PostgreSQL中。本参数只能在PostgreSQL启动时设置。在本参数值指定的目录下,会有名为s.PGSQL.nnnn的socket file,nnnn是PostgreSQL使用的端口号,在该目录下,还有一个名为.s.PGSQL.nnnn.lock的文件。这两个文件请不要手工删除。

是否可session级修改

修改后何时生效

重启PG instance生效

1.32.6. unix_socket_group

参数名称

unix_socket_group

数据类型

string

默认值

空字符串,空字符串表示使用启动PostgreSQL 的user的默认组。

取值范围

参数单位

参数含义

设置Unix-domain socket(s).的owning group(请注意:socket的owning user总是启动PostgreSQL的user)。本参数与unix_socket_permissions结合使用可以将其作为Unix-domain connections的额外访问控制机制。本参数只能在PostgreSQL启动时设置。本参数不支持在Windows上使用,在Windows上,本参数取任何值都会被忽略。

是否可session级修改

修改后何时生效

重启PG instance生效

1.32.7. unix_socket_permissions

参数名称

unix_socket_permissions

数据类型

integer

默认值

0777,0777表示任何人都可以连接

取值范围

0到511

参数单位

参数含义

本参数用于设置Unix-domain socket(s)的访问权限。Unix-domain socket使用通常的Unix文件系统权限集。参数值预计是被chmod和umask系统调用接受的数字模式。(要使用惯用的八进制格式,数字必须以0(零)开头。)合理的参数值是0770(仅用户和组,另请参见unix_socket_group)和0700(仅用户)。请注意,对于Unix-domain socket,仅写许可权是重要的,因此设置或撤消读或执行许可权没有意义。本参数只能在PostgreSQL启动时设置。在完全忽略socket permissions的操作系统上(特别是自solaris10起的Solaris),此参数是不相关的。在此类操作系统上,可以通过将unix目录指向一个搜索权限仅限于所需访问用户的目录来实现类似的效果。

是否可session级修改

修改后何时生效

重启PG instance生效

1.32.8. bonjour

参数名称

bonjour

数据类型

boolean

默认值

off

取值范围

off和on

参数单位

参数含义

本参数控制是否通过Bonjour机制通告PostgreSQL的存在。本参数只能在PostgreSQL启动时设置。

是否可session级修改

修改后何时生效

重启PG instance生效。

1.32.9. bonjour_name

参数名称

bonjour_name

数据类型

string

默认值

空字符串。空字符串表示使用计算机名

取值范围

参数单位

参数含义

本参数用于设置Bonjour service name。当PostgreSQL软件没有编译Bonjour support时,本参数会被忽略。本参数只能在PostgreSQL启动时设置。

是否可session级修改

修改后何时生效

重启PG instance生效。

1.33. Resource Usage / Asynchronous Behavior

1.33.1. effective_io_concurrency

参数名称

effective_io_concurrency

数据类型

integer

默认值

1

取值范围

0到1000,0表示禁止发布异步I/O请求

参数单位

参数含义

有效利用disk子系统的并发disk io的数量。目前,本参数仅仅影响bitmap heap scans。对于HDD(机械硬盘),本参数的起始值应该是PostgreSQL database用到的、组成raid 0 条带或者raid 1镜像的单独 disk drive的个数。但是,如果PostgreSQL数据库经常忙于并发会话中发出的多个查询,则较低的值可能足以使磁盘阵列保持繁忙。高于使磁盘保持忙碌的本参数值只会导致额外的CPU开销,固态盘(SSD)以及其他基于内存的存储可以经常处理很多并发请求,因此,此时最佳的值可能是几百。异步IO请求取决于一个有效的posix_fadvise函数,该函数在有些操作系统上是缺少的。在该函数缺少时,设置本参数为非零值会导致错误发生。在有些操作系统上(比如Solaris),本函数存在但是并没有实际的执行任何操作。在受到支持的操作系统上,本参数值的默认值为1,否则为零。本参数值可以被tablespace级别的同名参数值所覆盖。

是否可session级修改

修改后何时生效

Session级别修改立即生效非session级修改reload生效

1.33.2. maintenance_io_concurrency

参数名称

maintenance_io_concurrency

数据类型

integer

默认值

10

取值范围

0到1000

参数单位

参数含义

本参数类似于effective_io_concurrency参数,但本参数用于代表许多客户端会话执行的维护工作。在受到支持的操作系统上,本参数值的默认值为10,否则为零。本参数值可以被tablespace级别的同名参数值所覆盖。

是否可session级修改

修改后何时生效

Session级别修改立即生效非session级修改reload生效

1.33.3. max_worker_processes

参数名称

max_worker_processes

数据类型

integer

默认值

8

取值范围

0到262143

参数单位

参数含义

本参数值指定了PostgreSQL所能支持的并发worker进程的最大数量。本参数值仅能在PostgreSQL启动时设置。当运行在standby server环境中时,在standby server上的本参数值必须大于或者等于在master server上的本参数值。否则,query是不能运行在standby server上。当改变本参数值时,请考虑调整max_parallel_workers,参数,max_parallel_maintenance_workers参数,max_parallel_workers_per_gather参数

是否可session级修改

修改后何时生效

重启PG instance生效

1.33.4. max_parallel_workers_per_gather

参数名称

max_parallel_workers_per_gather

数据类型

integer

默认值

2

取值范围

0到1024,0表示禁用parallel query execution

参数单位

参数含义

本参数指定了可以被单个Gather或者Gather Merge Node启动的worker进程的最大数量。Parallel Workers进程从由max_worker_processes配置参数建立的进程池中获取,受限于max_parallel_workers配置参数。请注意,请求的workers的数量在运行时并不一定实际可用,如果这个情况发生,执行计划会以少于期望个数的workers去运行,这可能是低效的。请注意,parallel queries可能比非parallel queries消耗更多的资源,因为每个工作进程是一个完全独立的进程,其对系统的影响与附加用户会话大致相同。在为此设置选择值时,以及在配置控制资源利用率的其他设置(如work_mem)时,都应考虑到这一点。诸如work_mem之类的资源限制单独应用于每个worker,这意味着所有进程的总利用率可能比任何单个进程的正常利用率高得多。例如,一个使用4个worker的并行查询可能会使用多达5倍的CPU时间、内存、I/O带宽。

是否可session级修改

修改后何时生效

Session级别修改立即生效非session级修改reload生效

1.33.5. max_parallel_maintenance_workers

参数名称

max_parallel_maintenance_workers

数据类型

integer

默认值

2

取值范围

0到1024,0表示禁用由实用命令使用的parallel workers

参数单位

参数含义

可以被单个实用命令启动的parallel worker的最大数量。当前,支持parallel workers的并行实用命令有如下几种: create index 建立B-Tree时; vacuum 不带full选项时; Parallel Workers进程从由max_worker_processes配置参数建立的进程池中获取,受限于max_parallel_workers配置参数。请注意,请求的workers的数量在运行时并不一定实际可用,如果这个情况发生,执行计划会以少于期望个数的workers去运行,这可能是低效的。注意,并行实用程序命令不应该比等效的非并行操作消耗更多的内存,这种策略不同于并行查询,在并行查询中资源限制通常适用于每个worker进程。并行实用命令将资源限制maintenance_work_mem视为应用于整个实用命令的限制,而不考虑并行工作进程的数量。然而,并行实用命令仍然可能消耗更多的CPU资源和I/O带宽。

是否可session级修改

修改后何时生效

Session级别修改立即生效非session级修改reload生效

1.33.6. max_parallel_workers

参数名称

max_parallel_workers

数据类型

integer

默认值

8

取值范围

0到1024

参数单位

参数含义

本参数值指定了PostgreSQL支持的parallel操作的worker的最大数量。当增加或者减少本参数值时,请考虑同时调整max_parallel_maintenance_workers 配置参数和 max_parallel_workers_per_gather配置参数。请注意:当本参数值高于max_worker_processes参数值时不会有任何作用。因为,因为parallel workers是从max_worker_processes配置参数所建立的工作进程池中获取的。

是否可session级修改

修改后何时生效

Session级别修改立即生效非session级修改reload生效

1.33.7. backend_flush_after

参数名称

backend_flush_after

数据类型

integer

默认值

0,0表示禁用强制writeback

取值范围

0到256

参数单位

8KB

参数含义

每当单个backend进程写入的数据超过本参数值时,尝试强制操作系统向底层存储发出这些写入操作。这样做将限制内核page cache中脏数据的数量,减少在检查点结束时发出fsync时,或者当操作系统在后台以更大的批写入数据时暂停的可能性。这通常会大大减少事务延迟,但也有一些情况,特别是在工作负载大于共享缓冲区,但小于操作系统page cache的情况下,性能可能会降低。此参数可能在某些平台下无效。如果指定该值时没有单位,则将其作为块,即源码中的符号常量BLCKSZ个字节,通常为8KB。如果BLCKSZ不是8KB,则最大值与之成比例缩放。

是否可session级修改

修改后何时生效

Session级别修改立即生效非session级修改reload生效

1.33.8. old_snapshot_threshold

参数名称

old_snapshot_threshold

数据类型

intger

默认值

-1,-1代表禁用本特性,表示snapshot age 是无限制的。

取值范围

-1到86400

参数单位

分钟

参数含义

设置在使用snapshot时可以使用查询快照而不会出现"snapshot too old"错误的最短时间。处于dead状态的且超过本参数值的数据可以被vacuum掉。这有助于防止snapshot长期使用时出现表膨胀。为了防止由于清除快照可见的数据而产生不正确的结果,当快照早于本参数值并且快照用于读取自创建快照以来已修改的页面时,将生成一个错误。对生产环境有用的值可能从几个小时到几天不等。只允许使用较小的值(如0或1min),因为它们有时可能对测试有用。虽然允许高达60d的设置,但请注意,在许多工作负载中,在更短的时间内可能会出现极端膨胀或事务ID环绕(transaction ID wraparound)。启用本特性后,relation末尾释放的空间将无法释放给操作系统,因为这可能会删除检测"snapshot too old"条件所需的信息。分配给relation的所有空间都与该relation保持关联,以便仅在该relation中重用,除非显式释放(例如,使用VACUUM FULL)。此参数并不试图保证在任何特定情况下都会生成错误。事实上,如果正确的结果可以从一个已经物化的结果集中生成,则即使引用表中的底层行已被vacuum,也不会生成错误。某些表不能安全地提前vacuum,因此不受此设置的影响,例如系统目录(system catalogs)。对于这样的表,此设置既不会减少膨胀,也不会在扫描时产生"snapshot too old"错误的可能性。

是否可session级修改

修改后何时生效

重启PG instance生效

1.34. Replication / Standby Servers

1.34.1. primary_conninfo

参数名称

primary_conninfo

数据类型

string

默认值

空字符串

取值范围

参数单位

参数含义

本参数为备库参数,本参数在sending-server端会被忽略。本参数值指定了连接到sending server的连接字符串(连接信息).在本连接字符串中缺少的option,PostgreSQL会到环境变量中取寻找。若是环境变量中也没有,那么就用默认值。连接字符串应该指定如下信息: Sending Server的主机名或者IP地址、 Sending Server的端口号(若是跟standby server端口号不同) Username(该用户在sending-server端有合适的权限) Password:请注意,密码可以在primary_conninfo中提供,也可以在standby server上的~/.pgpass文件中提供(此时,是用replication作为database name)。请不要在primary_conninfo中指定database的名字本参数仅能在postgresql.conf文件或者server command line中设置。当在wal receiver process正在运行的情况下修改本参数值,wal receiver process会被发信号通知关闭然后再以新参数值去启动,除非primary_conninfo配置参数为空字符串。当PostgreSQL没有处于standby mode的情况下,本参数无效。

是否可session级修改

修改后何时生效

Reload即可生效

1.34.2. primary_slot_name

参数名称

primary_slot_name

数据类型

string

默认值

空字符串

取值范围

参数单位

参数含义

本参数为备库参数,本参数在sending-server端会被忽略。本参数指定了当要连接到sending-server端时,要使用的sending-server端的已经存在的replication slot,用来控制sending-server端的wal removal。本参数仅能在postgresql.conf文件或者server command line中设置。当在wal receiver process正在运行的情况下修改本参数值,wal receiver process会被发信号通知关闭然后再以新参数值去启动,本参数在如下情况下没有作用:PostgreSQL没有处于standby mode或者primary_conninfo参数值没有设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.34.3. promote_trigger_file

参数名称

promote_trigger_file

数据类型

string

默认值

空字符串

取值范围

参数单位

参数含义

本参数为备库参数,本参数在sending-server端会被忽略。本参数值指定了一个trigger file,该文件用于standby server结束recovery状态进行角色提升。本参数值没有设置时,你可以使用pg_ctl promote或者使用函数pg_promote()进行角色提升。本参数仅能在postgresql.conf文件或者server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.34.4. hot_standby

参数名称

hot_standby

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

本参数为备库参数,本参数在sending-server端会被忽略。本参数控制standby server是否允许运行只读查询语句。本参数仅能在server start时设置。

是否可session级修改

修改后何时生效

重启PG instance生效

1.34.5. max_standby_archive_delay

参数名称

max_standby_archive_delay

数据类型

integer

默认值

30000

取值范围

-1到2147483647,-1表示允许standby server一直在等待直到冲突的query执行完毕。

参数单位

毫秒

参数含义

本参数为备库参数,本参数在sending-server端会被忽略。当hot standby在被启用的状态下,本参数决定了standby server在取消掉standby中运行的且与WAL日志应用有冲突的查询语句之前的等待时间。本参数适用于从wal 归档读取wal data的情况。当不指定单位时,本参数的单位是毫秒。本参数仅能在postgresql.conf文件或者server command line中设置。

本参数值与查询语句在取消之前可以运行的最长时间不同。相反,本参数值是:一旦standby server从sending-server收到wal data,所允许的应用wal data的最长时间。因此,如果一个查询在一个wal segment之前导致了显著的延迟,那么在standby server再次赶上之前,后续冲突查询的容忍时间(宽限时间)将少得多。

是否可session级修改

修改后何时生效

Reload即可生效

1.34.6. max_standby_streaming_delay

参数名称

max_standby_streaming_delay

数据类型

integer

默认值

30000

取值范围

-1到2147483647,-1表示允许standby server一直在等待直到冲突的query执行完毕。

参数单位

毫秒

参数含义

本参数为备库参数,本参数在sending-server端会被忽略。当hot standby在被启用的状态下,本参数决定了standby server在取消掉standby中运行的且与WAL日志应用有冲突的查询语句之前的等待时间。本参数适用于wal data通过流复制被接收的情况。当不指定单位时,本参数的单位是毫秒。本参数仅能在postgresql.conf文件或者server command line中设置。本参数值与查询语句在取消之前可以运行的最长时间不同。相反,本参数值是从主服务器接收到WAL数据后允许应用该数据的最长总时间,因此,如果一个查询导致了显著的延迟,那么在后备服务器再次赶上之前,后续冲突查询的容忍时间(宽限时间)将少得多

是否可session级修改

修改后何时生效

Reload即可生效

1.34.7. wal_receiver_create_temp_slot

参数名称

wal_receiver_create_temp_slot

数据类型

bool

默认值

off

取值范围

off和on

参数单位

参数含义

本参数为备库参数,本参数在sending-server端会被忽略。本参数用于指定当永久的复制槽没有配置(复制槽配置请见配置参数primary_slot_name)的情况下,wal receiver是否在远程PG Cluster上创建一个临时的复制槽。本参数仅能在postgresql.conf文件或者server command line中设置。当wal receiver进程正在运行的同时本参数被改变时,wal receiver进程会关闭并重启以读取到新值。

是否可session级修改

修改后何时生效

Reload即可生效

1.34.8. wal_receiver_status_interval

参数名称

wal_receiver_status_interval

数据类型

integer

默认值

10

取值范围

0到2147483,0表示完全禁止状态更新。

参数单位

参数含义

本参数为备库参数,本参数在sending-server端会被忽略。本参数指定了备库上的wal receiver 进程向 primary库或者sending-server库发送复制进度(replication progress)的最短时间频率。备库将报告它写到的wal的位置,它flush 到disk的位置以及它应用wal的位置。本参数值是两次报告之间的最大时间间隔。每次写入(write)或刷新(flush)位置更改时都会发送更新,或者至少与本参数指定的频率相同。因此,应用的位置可能稍微落后于真实位置。本参数仅能在postgresql.conf文件或者server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.34.9. hot_standby_feedback

参数名称

hot_standby_feedback

数据类型

bool

默认值

off

取值范围

off和on

参数单位

参数含义

本参数为备库参数,本参数在sending-server端会被忽略。是否允许一个hot standby的备库发送关于正在备库执行的查询的feedback给primary库或者upstream库。本参数值可以消除由于cleanup records导致的query cancels,但是会导致primary库上发生膨胀。feedback信息的发送频率不会超过配置参数wal_receiver_status_interval。当是级联复制环境时,feedback会通过upstream(即:中间节点)会最终到达primary库。Standby节点除了向upstream反馈信息外,没有其他用途。本参数不会覆盖primary端的配置参数old_snapshot_threshold的行为。Standby端上超过primary端age阈值的snapshot会变为invalid,这导致standby端上的查询被取消。这是因为配置参数old_snapshot_threshold的目的是在时间上对dead row导致膨胀提供绝对的限制,否则会因为standby的配置违反该限制。

是否可session级修改

修改后何时生效

Reload即可生效

1.34.10. wal_receiver_timeout

参数名称

wal_receiver_timeout

数据类型

integer

默认值

60000

取值范围

0到2147483647,0代表禁用本timeout检测机制。

参数单位

毫秒

参数含义

本参数为备库参数,本参数在sending-server端会被忽略。当本备端与sending-server端或者primary端的inactive状态超过本参数值时,终止掉复制连接。本参数对receiving standby server检测primary node crash或者网络故障很有用。本参数仅能在postgresql.conf文件或者server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.34.11. wal_retrieve_retry_interval

参数名称

wal_retrieve_retry_interval

数据类型

integer

默认值

5000

取值范围

1到2147483647

参数单位

毫秒

参数含义

本参数为备库参数,本参数在sending-server端会被忽略。本参数控制standby server遇到从所有源头(streaming replication、本地pg_wal目录、WAL Archive位置)获取wal而获取不到时的等待时间。本参数对处于in recovery的节点需要控制等待新的wal data可用的时间很有用。比如,在archive recovery中,通过降低本参数值,在检测一个新wal log file时,可以使recovery更快响应。在一个wal file产生很少的PostgreSQL中,增加本参数值会减少访问wal archive的请求次数。这在那些基础设施的访问次数会被考虑在内的云环境中非常有用。本参数仅能在postgresql.conf文件或者server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.34.12. recovery_min_apply_delay

参数名称

recovery_min_apply_delay

数据类型

integer

默认值

0,0代表无延迟。

取值范围

0到2147483647

参数单位

毫秒

参数含义

本参数为备库参数,本参数在sending-server端会被忽略。默认情况下,standby server会及时的restore 来自于sending server端的WAL 记录。数据的延迟copy可能很有用,它提供了纠正数据丢失错误的机会。本参数值指定了允许你指定延迟recovery的时间长度。比如,你设置本参数值为5分钟,那么只有当standby端的系统时间比master端报告的提交时间至少晚5分钟时,standby端才会重放每个事物的提交。

是否可session级修改

修改后何时生效

Reload即可生效

1.35. Query Tuning / Planner Cost Constants

1.35.1. seq_page_cost

参数名称

seq_page_cost

数据类型

real

默认值

1

取值范围

0到1.79769e+308

参数单位

参数含义

本参数设置了顺序读取磁盘上的page的成本。在table以及index上的表空间级别的同名本参数可以覆盖配置参数中的该参数值。增大本参数值会使索引扫描看起来相对更昂贵

是否可session级修改

修改后何时生效

Session修改立即生效;其他修改Reload即可生效

1.35.2. random_page_cost

参数名称

random_page_cost

数据类型

real

默认值

4

取值范围

0到1.79769e+308

参数单位

参数含义

本参数设置了非顺序读取磁盘上的page的成本。在table以及index上的表空间级别的同名本参数可以覆盖配置参数中的该参数值。相对于seq_page_cost减少本参数值会使PostgreSQL更倾向于使用索引扫描。随机访问机械硬盘要比四次顺序访问还要昂贵。但是,使用较低的默认值(4.0),因为大多数对磁盘的随机访问(如索引读取)都假定在cache中。默认值可以认为是将随机访问模型比顺序访问慢40倍,同时,期望90%的随机读取都是在cache中。如果您认为90%的缓存比率对于您的工作负载来说是一个不正确的假设,那么你可以增加本参数值以反映随机存储读取的真实成本。相应的,如果你的数据可能完全在cache中,比如在database大小小于服务器内存,减少本参数值是合适的。那些相对于顺序读具有低随机读成本的存储(比如固态驱动器),也可以使用较低本参数值(比如1.1)

是否可session级修改

修改后何时生效

Session修改立即生效;其他修改Reload即可生效

1.35.3. cpu_tuple_cost

参数名称

cpu_tuple_cost

数据类型

real

默认值

0.01

取值范围

0到1.79769e+308

参数单位

参数含义

本参数值设置在执行一个SQL语句时planner预计的处理每行数据的成本

是否可session级修改

修改后何时生效

Session修改立即生效;其他修改Reload即可生效

1.35.4. cpu_index_tuple_cost

参数名称

cpu_index_tuple_cost

数据类型

real

默认值

0.005

取值范围

0到1.79769e+308

参数单位

参数含义

本参数用于设置在索引扫描期间planner预计的处理每个index entry的成本。

是否可session级修改

修改后何时生效

Session修改立即生效;其他修改Reload即可生效

1.35.5. cpu_operator_cost

参数名称

cpu_operator_cost

数据类型

real

默认值

0.0025

取值范围

0到1.79769e+308

参数单位

参数含义

本参数值设置在执行一个SQL语句时planner预计的处理执行的每个operator或者function的成本。

是否可session级修改

修改后何时生效

Session修改立即生效;其他修改Reload即可生效

1.35.6. parallel_setup_cost

参数名称

parallel_setup_cost

数据类型

real

默认值

1000

取值范围

0到1.79769e+308

参数单位

参数含义

本参数值设置planner预估的启动parallel worker processes的成本。

是否可session级修改

修改后何时生效

Session修改立即生效;其他修改Reload即可生效

1.35.7. parallel_tuple_cost

参数名称

parallel_tuple_cost

数据类型

real

默认值

0.1

取值范围

0到1.79769e+308

参数单位

参数含义

本参数值设置了从一个parallel worker进程将一个tuple传输到另外一个parallel worker进程的成本。

是否可session级修改

修改后何时生效

Session修改立即生效;其他修改Reload即可生效

1.35.8. min_parallel_table_scan_size

参数名称

min_parallel_table_scan_size

数据类型

integer

默认值

1024,默认情况下是8MB

取值范围

0到715827882

参数单位

8KB

参数含义

本参数设置了考虑使用parallel scan的table的数据(data)的最小大小,对于并行顺序扫描,table的数据(data)的最小大小总是等于table的大小。但是当index被用到时,table的数据(data)的最小大小通常会笑。如果本参数不带单位,取的是源码中符号常量BLCKSZ的值,通常为8KB。

是否可session级修改

修改后何时生效

Session修改立即生效;其他修改Reload即可生效

1.35.9. min_parallel_index_scan_size

参数名称

min_parallel_index_scan_size

数据类型

integer

默认值

64,默认情况下是512KB

取值范围

0到715827882

参数单位

8KB

参数含义

本参数设置了考虑使用parallel scan的index的数据(data)的最小大小,请注意:一个并行索引扫通常不会扫过整个index。本参数是planner认为扫描实际会涉及的页数,本参数也用来决定一个特定的索引是否可以参与并行vacuum。如果本参数不带单位,取的是源码中符号常量BLCKSZ的值。

是否可session级修改

修改后何时生效

Session修改立即生效;其他修改Reload即可生效

1.35.10. effective_cache_size

参数名称

effective_cache_size

数据类型

integer

默认值

524288

取值范围

1到2147483647

参数单位

8KB

参数含义

本参数设置了planner对单个SQL语句可用的disk cache的有效大小。这被纳入使用索引的成本估算中。值越大,使用索引扫描的可能性越大;值越小,使用顺序扫描的可能性越大。设置本参数时,应该同时考虑PostgreSQL的shared buffers和kernel的page cache用于PostgreSQL数据文件的部分,虽然这两个位置都可能存在一些数据。另外,还要考虑在不同表上预计的并发SQL语句数量,因为他们必须共享可用空间。本参数不影响PostgreSQL分配的shared buffers大小,也不会保留kernel的page cache。它仅用于估算目的。系统也不坚定在两次查询之间数据扔保留在磁盘cache中。如果本参数不带单位,取的是源码中符号常量BLCKSZ的值。通常为8KB。如果BLCKSZ不是8KB,则默认值按照定比例缩放。

是否可session级修改

修改后何时生效

Session修改立即生效;其他修改Reload即可生效

1.35.11. jit_above_cost

参数名称

jit_above_cost

数据类型

real

默认值

100000

取值范围

-1到1.79769e+308。-1表示禁用JIT编译

参数单位

参数含义

当SQL语句的查询成本高于本参数值时,JIT编译会被激活,若是JIT编译被enable的情况下。执行JIT会消耗planning time但是可以加速查询执行。

是否可session级修改

修改后何时生效

Session修改立即生效;其他修改Reload即可生效

1.35.12. jit_inline_above_cost

参数名称

jit_inline_above_cost

数据类型

real

默认值

500000

取值范围

-1到1.79769e+308,-1表示禁用inline

参数单位

参数含义

当SQL语句的查询成本高于本参数值时,JIT编译会尝试inline functions and operators。Inlining会增加planning time,但是会提升执行速度。将本参数值设置为低于jit_above_cost是没有意义的。

是否可session级修改

修改后何时生效

Session修改立即生效;其他修改Reload即可生效

1.35.13. jit_optimize_above_cost

参数名称

jit_optimize_above_cost

数据类型

real

默认值

500000

取值范围

-1到1.79769e+308,-1表示禁用expensive optimizations

参数单位

参数含义

当SQL语句的查询成本高于本参数值时,JIT编译会尝试进行expensive optimizations。这种优化会增加planning time,但是会提升执行速度。将本参数值设置为低于jit_above_cost是没有意义的,将本参数值设置为高于jit_inline_above_cost也是没有益处的。

是否可session级修改

修改后何时生效

Session修改立即生效;其他修改Reload即可生效

1.36. autovacuum

1.36.1. autovacuum

参数名称

autovacuum

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

控制PostgreSQL是否允许autovacuum launcher daemon.autovacuum进程能正常工作的前提条件是配置参数track_counts设置为启用。本参数仅能在postgresql.conf文件或者server command line中设置。本参数可以在表级设置,在表级设置的优先级高于配置参数中的优先级。即使本参数被禁用,若是需要防止事务id wraparound,PostgreSQL会启动autovacuum进程。

是否可session级修改

修改后何时生效

Reload即可生效

1.36.2. log_autovacuum_min_duration

参数名称

log_autovacuum_min_duration

数据类型

integer

默认值

0,0表示记录所有autovacuum操作到PostgreSQL运行日志中

取值范围

-1到2147483647,-1表示禁止autovacuum进程执行信息打印到PostgreSQL运行日志中。

参数单位

毫秒

参数含义

当autovacuum进程运行的时间长度大于等于本参数值时,autovacuum进程执行时的每个动作会被记录到PostgreSQL运行日志中。举例,若是本参数值设置为250ms,那么所有运行时间长度大于等于250ms的automatic vacuum 和analyze操作会记录到PostgreSQL运行日志中。当本参数值被设置为-1之外的值时,若是autovacumm由于冲突所或者并发dropped relation的原因被skipped掉,一条信息会打印到PostgreSQL运行日志中。本参数仅能在postgresql.conf文件或者server command line中设置。本参数可以在表级设置,在表级设置的优先级高于配置参数中的优先级。

是否可session级修改

修改后何时生效

Reload即可生效

1.36.3. autovacuum_max_workers

参数名称

autovacuum_max_workers

数据类型

integer

默认值

3

取值范围

1到262143

参数单位

参数含义

本参数设置了同时可以运行的autovacuum worker进程的最大个数。本参数仅仅可以在PostgreSQL启动时设置。

是否可session级修改

修改后何时生效

重启PG instance生效

1.36.4. autovacuum_naptime

参数名称

autovacuum_naptime

数据类型

integer

默认值

60

取值范围

1·到2147483

参数单位

参数含义

本参数指定了两次autovacuum进程运行的最小时间间隔。在每次autovacuum进程运行时,autovacuum守护进程检查数据库并针对需要的表发出vacuum和analyze命令。本参数仅能在postgresql.conf文件或者server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.36.5. autovacuum_vacuum_threshold

参数名称

autovacuum_vacuum_threshold

数据类型

integer

默认值

50

取值范围

0到2147483647

参数单位

参数含义

本参数用于设置作为vacuum操作候选表的条件,即:更新或者删除掉多少条记录可以被作为vacuum操作的候选表。本参数仅能在postgresql.conf文件或者server command line中设置。本参数可以在表级设置,在表级设置的优先级高于配置参数中的优先级。

是否可session级修改

修改后何时生效

Reload即可生效

1.36.6. autovacuum_vacuum_insert_threshold

参数名称

autovacuum_vacuum_insert_threshold

数据类型

integer

默认值

1000

取值范围

-1到2147483647,-1表示即使有本参数值数量的insert记录,autovacuum守护进程也不会针对该表触发vacuum操作。

参数单位

参数含义

本参数用于设置作为vacuum操作候选表的条件,即:插入多少条记录可以触发针对该表的vacuum。本参数仅能在postgresql.conf文件或者server command line中设置。本参数可以在表级设置,在表级设置的优先级高于配置参数中的优先级。

是否可session级修改

修改后何时生效

Reload即可生效

1.36.7. autovacuum_analyze_threshold

参数名称

autovacuum_analyze_threshold

数据类型

integer

默认值

50

取值范围

0到2147483647

参数单位

参数含义

本参数用于设置作为analyze操作候选表的条件,即:插入、更新、删除多少条记录可以触发针对该表的analyze。本参数仅能在postgresql.conf文件或者server command line中设置。本参数可以在表级设置,在表级设置的优先级高于配置参数中的优先级。

是否可session级修改

修改后何时生效

Reload即可生效

1.36.8. autovacuum_vacuum_scale_factor

参数名称

autovacuum_vacuum_scale_factor

数据类型

real

默认值

0.2,0.2表示表大小的20%

取值范围

0到100

参数单位

参数含义

本参数设置了表大小的一个比率,当决定一个表是否触发vacuum操作时,该比率会被配置参数autovacuum_vacuum_threshold考虑在内。本参数仅能在postgresql.conf文件或者server command line中设置。本参数可以在表级设置,在表级设置的优先级高于配置参数中的优先级。

是否可session级修改

修改后何时生效

Reload即可生效

1.36.9. autovacuum_vacuum_insert_scale_factor

参数名称

autovacuum_vacuum_insert_scale_factor

数据类型

real

默认值

0.2,0.2表示表大小的20%

取值范围

0到100

参数单位

参数含义

本参数设置了表大小的一个比率,当决定一个表是否触发vacuum操作时,该比率会被配置参数autovacuum_vacuum_insert_threshold考虑在内。本参数仅能在postgresql.conf文件或者server command line中设置。本参数可以在表级设置,在表级设置的优先级高于配置参数中的优先级。

是否可session级修改

修改后何时生效

Reload即可生效

1.36.10. autovacuum_analyze_scale_factor

参数名称

autovacuum_analyze_scale_factor

数据类型

real

默认值

0.1

取值范围

0到100

参数单位

参数含义

本参数设置了表大小的一个比率,当决定一个表是否触发vacuum操作时,该比率会被配置参数autovacuum_analyze_threshold考虑在内。本参数仅能在postgresql.conf文件或者server command line中设置。本参数可以在表级设置,在表级设置的优先级高于配置参数中的优先级。

是否可session级修改

修改后何时生效

Reload即可生效

1.36.11. autovacuum_freeze_max_age

参数名称

autovacuum_freeze_max_age

数据类型

integer

默认值

200000000

取值范围

100000到2000000000

参数单位

参数含义

指定表的pg_class.relfrozenxid字段在强制执行vacuum操作以防止事务ID wraparound之前可以达到的最大年龄,请注意,即使autovacuum进程被禁用,PostgreSQL也会为了防止wraparound而启动autovacuum进程。Vacuum还允许从pg_xact子目录中删除旧文件,这就是为什么默认值是相对较低的2亿个事务的原因。此参数只能在服务器启动时设置,但是可以通过更改表存储参数来减少单个表的设置值。

是否可session级修改

修改后何时生效

重启PG instance生效

1.36.12. autovacuum_multixact_freeze_max_age

参数名称

autovacuum_multixact_freeze_max_age

数据类型

integer

默认值

400000000

取值范围

10000到2000000000

参数单位

参数含义

指定表的pg_class. relminmxid字段在强制执行vacuum操作以防止multixact ID wraparound之前可以达到的最大年龄,请注意,即使autovacuum进程被禁用,PostgreSQL也会为了防止wraparound而启动autovacuum进程。Vacuuming multixacts还允许从pg_multixact/members 和pg_multixact/offsets子目录中删除旧文件,这就是为什么默认值是相对较低的4亿个事务的原因。此参数只能在服务器启动时设置,但是可以通过更改表存储参数来减少单个表的设置值。

是否可session级修改

修改后何时生效

重启PG instance生效

1.36.13. autovacuum_vacuum_cost_delay

参数名称

autovacuum_vacuum_cost_delay

数据类型

real

默认值

2

取值范围

-1到100,-1表示使用配置参数vacuum_cost_delay的参数值。

参数单位

毫秒

参数含义

本参数是在autovacuum中vacuum操作用到的cost delay值。本参数仅能在postgresql.conf文件或者server command line中设置。本参数可以在表级设置,在表级设置的优先级高于配置参数中的优先级。

是否可session级修改

修改后何时生效

Reload即可生效

1.36.14. autovacuum_vacuum_cost_limit

参数名称

autovacuum_vacuum_cost_limit

数据类型

integer

默认值

-1,-1表示使用配置参数vacuum_cost_limit的参数值。

取值范围

-1到10000

参数单位

参数含义

本参数是在autovacuum中vacuum操作用到的cost limit值。请注意,如果有多个autovacuum workers,则本参数值按比例分布在运行中的autovacuum workers之间,以便每个autovacuum worker该值的总和不超过本参数值。本参数仅能在postgresql.conf文件或者server command line中设置。本参数可以在表级设置,在表级设置的优先级高于配置参数中的优先级。

是否可session级修改

修改后何时生效

Reload即可生效

1.37. Connections and Authentication / SSL

1.37.1. ssl

参数名称

ssl

数据类型

bool

默认值

off

取值范围

on和off

参数单位

参数含义

是否启用ssl连接

是否可session级修改

修改后何时生效

Reload即可生效

1.37.2. ssl_ca_file

参数名称

ssl_ca_file

数据类型

string

默认值

空字符串,空字符串表示没有CA File被加载,并且Client身份验证不会被执行。

取值范围

参数单位

参数含义

本参数指定了包括SSL server certificate authority (CA)的文件名。本参数值是相对于data directory的相对路径,本参数仅能在postgresql.conf文件或者server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.37.3. ssl_cert_file

参数名称

ssl_cert_file

数据类型

string

默认值

server.crt

取值范围

参数单位

参数含义

本参数指定了包括SSL server certificate的文件名。本参数值是相对于data directory的相对路径,本参数仅能在postgresql.conf文件或者server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.37.4. ssl_crl_file

参数名称

ssl_crl_file

数据类型

string

默认值

空字符串,空字符串表示没有CRL文件被加载。

取值范围

参数单位

参数含义

本参数指定了包括SSL server certificate revocation list (CRL)的文件名。本参数值是相对于data directory的相对路径,本参数仅能在postgresql.conf文件或者server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.37.5. ssl_key_file

参数名称

ssl_key_file

数据类型

string

默认值

server.key

取值范围

参数单位

参数含义

本参数指定了包括SSL server private key的文件名。本参数值是相对于data directory的相对路径,本参数仅能在postgresql.conf文件或者server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.37.6. ssl_ciphers

参数名称

ssl_ciphers

数据类型

string

默认值

HIGH:MEDIUM:+3DES:!aNULL

取值范围

参数单位

参数含义

设置允许被SSL连接使用的SSL ciphers suites的清单。有关此设置的语法和支持值的列表,请参阅OpenSSL package中的ciphers manual page。有使用TLS版本1.2及更低版本的连接才会受到影响。当前没有控制TLS版本1.3连接使用的密码选择的设置。默认值通常是一个合理的选择,除非您有特定的安全要求。本参数仅能在postgresql.conf文件或者server command line中设置。下面解释一下默认值的含义: HIGH:使用HIGH Group的Cipher suites(例如,AES、Camellia、3DES)MEDIUM:使用MEDIUM Group的Cipher suites(例如,RC4, SEED) +3DES:针对HIGH的OpenSSL默认排序是存在问题的,因为3DES排序高于AES128.这是错误的,因为3DES比ASE128提供了少的安全性,并且3DES更慢。在所有除了HIGH和MEDIUM的ciphers外,+3DES进行了重新排序 !aNULL:禁用掉没有经过身份验证的匿名cipher suites。此类cipher suites易于遭受中间人攻击,因此不应该使用。可用的cipher suites在不同OpenSSL版本中的细节差异很大。使用操作系统命令openssl ciphers -v 'HIGH:MEDIUM:+3DES:!aNULL’可以看到当前安装的OpenSSL库的实际细节。请注意:这个list会在运行时基于server key type被过滤

是否可session级修改

修改后何时生效

Reload即可生效

1.37.7. ssl_prefer_server_ciphers

参数名称

ssl_prefer_server_ciphers

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

指定是否优先使用server端的SSL cipher,还是使用client端的。本参数仅能在postgresql.conf文件或者server command line中设置。更老的PostgreSQL版本没有本参数,更老的PostgreSQL版本总是优先使用client端的SSL cipher。本参数仅能在postgresql.conf文件或者server command line中设置。本参数的目的是用于向后兼容性。优先使用server端通常更好,因为更可能的是server端的配置是适当的

是否可session级修改

修改后何时生效

Reload即可生效

1.37.8. ssl_ecdh_curve

参数名称

ssl_ecdh_curve

数据类型

string

默认值

prime256v1

取值范围

参数单位

参数含义

指定要在ECDH密钥交换中使用的曲线的名称。它需要所有连接的客户端支持。它不需要与服务器的椭圆曲线密钥使用的曲线相同。本参数仅能在postgresql.conf文件或者server command line中设置。最常见曲线的OpenSSL名称是:prime256v1(NIST P-256)、secp384r1(NIST P-384)、secp521r1(NIST P-521)。可用曲线的完整列表可以通过操作系统命令openssl ecparam -list_curves显示。但并不是所有这些都可以在TLS中使用。

是否可session级修改

修改后何时生效

Reload即可生效

1.37.9. ssl_min_protocol_version

参数名称

ssl_min_protocol_version

数据类型

enum

默认值

TLSv1.2

取值范围

{TLSv1,TLSv1.1,TLSv1.2,TLSv1.3}

参数单位

参数含义

设置使用的SSL/TLS协议的最小版本。OpenSSLLibrary的更老的版本不支持所有的值。如果选择了不支持的设置,将引发错误。TLS 1.0之前的协议版本(即SSL version 2 和3)始终处于禁用状态。默认值是TLSv1.2,该默认值是满足本文档编写时的工业最佳实践。

是否可session级修改

修改后何时生效

Reload即可生效

1.37.10. ssl_max_protocol_version

参数名称

ssl_max_protocol_version

数据类型

enum

默认值

空字符串,空字符串意味着运行任何的协议版本。

取值范围

{"",TLSv1,TLSv1.1,TLSv1.2,TLSv1.3}

参数单位

参数含义

设置使用的SSL/TLS协议的最大版本,这对测试或者有些组件使用新版本协议出现问题是有用的。

是否可session级修改

修改后何时生效

Reload即可生效

1.37.11. ssl_dh_params_file

参数名称

ssl_dh_params_file

数据类型

string

默认值

空字符串,空字符串意味着使用默认DH参数编译。

取值范围

参数单位

参数含义

指定包含Diffie-Hellman参数的文件名,该参数用于所谓的临时DH SSL密码族。如果攻击者设法破解众所周知的编译在DH中的参数,那么使用自定义DH参数可以减少暴露。您可以使用操作系统命令openssl dhparam-out dhparams.pem 2048创建自己的DH参数文件本参数仅能在postgresql.conf文件或者server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.37.12. ssl_passphrase_command

参数名称

ssl_passphrase_command

数据类型

string

默认值

空字符串,空字符串表示使用内置的提示机制。

取值范围

参数单位

参数含义

设置需要获取用于解密SSL文件(如私钥)的密码短语时要调用的外部命令。命令必须将密码短语打印到标准输出,并以代码0退出。在参数值中,%p替换为提示字符串(写%%表示文本值%)。请注意提示字符串可能包含空格,因此请确保引用足够的引号。命令实际上不必提示用户输入密码短语,它可以从一个文件中读取它,从一个keychain工具中获取它,或者类似的。由用户来确定所选机制是否足够安全本参数仅能在postgresql.conf文件或者server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.37.13. ssl_passphrase_command_supports_reload

参数名称

ssl_passphrase_command_supports_reload

数据类型

bool

默认值

off,off表示在reload时,ssl_passphrase_command配置参数会被忽略,并且在passphrase被需要时,SSL configuration不会被reload

取值范围

on和off

参数单位

参数含义

当一个key file需要passphrase时,本参数决定由ssl_passphrase_command配置参数设置的passphrase command在configuration reload期间是否被调用本参数仅能在postgresql.conf文件或者server command line中设置。该设置适用于需要TTY进行提示的命令,该命令在PostgreSQL运行时可能不可用。例如,如果密码短语是从文件获取的,则将本参数设置为on可能是合适的

是否可session级修改

修改后何时生效

Reload即可生效

1.38. Resource Usage / Memory

1.38.1. shared_buffers

参数名称

shared_buffers

数据类型

integer

默认值

16384,即:128MB

取值范围

16到1073741823

参数单位

8KB,若是指定本参数值时不带单位,则取自源码中的符号常量BLCKSZ大小,默认是8KB。非默认的BLCKSZ大小会改变本参数的最小值。本参数值仅仅能在PostgreSQL启动时设置。建议将OS物理内存的25%分配给本参数值。因为PostgreSQL依赖于操作系统的cache(也就是文件系统的page cache),因此将超过40%的RAM分配给本参数值的情况不太可能比分配较小的缓冲区效果更好。较大的本参数值通常需要相应的增加max_wal_size, 以便在较长时间内分散写入大量新数据或更改数据的过程。

参数含义

是否可session级修改

修改后何时生效

重启PG instance生效

1.38.2. huge_pages

参数名称

huge_pages

数据类型

enum

默认值

try,try的含义是PostgreSQL会尝试使用huge pages,如果尝试失败将返回默认值。on的含义是请求huge pages失败将阻止PostgreSQL启动,off的含义是不会启用huge pages。目前,本参数值仅支持Linux和Windows平台。当在其他平台下本参数值设置为try时,本参数值会被忽略。 huge pages的使用导致了更小的page tables以及耗费在内存管理方面的更小的CPU时间,这提高了性能。在Windows平台上,huge pages被称之为large pages。开启large pages的步骤: 0.安装PostgreSQL 数据库 1.关闭windows uac控制面板—​系统和安全—​更改用户账户控制设置—​改为’从不通知',点击确定。 2.在windows组策略编辑器,赋予运行PostgreSQL的操作系统用户’锁定内存页’的权力(Lock Pages in Memory)计算机配置\Windows 设置\安全设置\本地策略\用户权利分配\下的"锁定内存页"这个策略。 3.将windows服务中的postgresql-x64-11这个服务改为手动启动。 4.重新启动OS 5.设置postgresql.conf的配置参数huge_pages=on 6.设置postgresql.conf的配置参数shared_buffers=2048MB 7.以管理员身份打开cmd窗口,执行pg_ctl start -D e:\postgresql\11\data启动PostgreSQL 8.验证是否启用请注意:当启用large pages时,不能用Windows服务中的PostgreSQL服务启动postgresql。请注意,本参数设置仅影响main shared memory area. Linux、FreeBSD和Illumos等操作系统也可以自动使用huge pages(也称为"super" pages 或者 "large" pages)进行正常内存分配,而无需PostgreSQL的显式请求。在Linux上,这被称为"transparent huge pages"(THP)。众所周知,对于某些Linux版本的某些用户来说,该特性会导致PostgreSQL的性能下降,因此目前不鼓励使用它(与显式使用huge_pages)。

取值范围

{off,on,try}

参数单位

参数含义

控制shared_buffers是否使用huge pages。

是否可session级修改

修改后何时生效

重启PG instance生效

1.38.3. temp_buffers

参数名称

temp_buffers

数据类型

integer

默认值

1024

取值范围

100到1073741823

参数单位

8KB

参数含义

设置每个session使用的temporary buffers的最大值,供临时表使用。指定本参数值时若是不带单位,以blocks为单位,取自源码中符号常量BLCKSZ,通常为8KB。若是BLCKSZ不为8KB,则本参数按照等比例变化。本参数值可以在单个session中更改,但只能在session中首次使用临时表之前更改;随后更改该值的尝试不会对该session产生任何影响。session将根据需要分配临时缓冲区,直到到达本参数值指定的限制。

是否可session级修改

修改后何时生效

Reload即可生效

1.38.4. max_prepared_transactions

参数名称

max_prepared_transactions

数据类型

integer

默认值

100

取值范围

0到262143,0代表禁用prepared-transaction特性。

参数单位

设置同时可以处于prepared状态的最大的事务个数。若是你不打算使用prepared transaction,请将本参数值设置为零以防止偶然建立prepared transaction。如果你使用prepared transaction,你可能希望本参数值与max_connections一样大。这样每个session都可以有一个prepared transaction pending。当有流复制环境是,你必须确保在备库上该参数值要大于等于在主库上的该参数值,否则,不能在备库上运行查询语句。

参数含义

是否可session级修改

修改后何时生效

重启PG instance生效

1.38.5. work_mem

参数名称

work_mem

数据类型

integer

默认值

4096

取值范围

64到2147483647

参数单位

KB

参数含义

在写入磁盘临时文件之前,被查询操作(比如sort或者hash table)使用的内存最大值。若是指定本参数值时不带单位,那么是以KB为单位。请注意,针对复杂的查询,sort或者hash操作可能以parallel去运行,在开始向磁盘的临时文件写入数据之前,每个操作被允许最多使用本参数值对应的内存大小。同事,正在运行的多个session会并发执行这些操作。因此,使用的所有内存可以是本参数值的若干倍,当设置本参数值时,需要明确记住这个事实。Sort操作被如下使用:order by、distinct、merge joins;hash table被如下使用:hash joins、hash-base aggregation、在in子句中的基于hash的处理。
基于哈希的操作通常比基于排序的等效操作对内存可用性更加敏感。哈希表可用的内存是通过work_mem*hash_mem_multiplier来计算的。这使得基于哈希的操作使用的内存量可能超过通常的work_mem数量。

是否可session级修改

修改后何时生效

Session级修改立即生效其他修改Reload即可生效

1.38.6. hash_mem_multiplier

参数名称

hash_mem_multiplier

数据类型

real

默认值

1

取值范围

1到1000

参数单位

参数含义

本参数值用于计算hash-base操作可以使用的最大内存。该最大内存是由work_mem*hash_mem_multiplier决定的。在经常有大量查询操作的环境中,考虑增加本参数值,特别是当简单的增加work_mem会导致内存压力时(内存压力通常以间歇性内存不足的形式出现)。设置我1.5或者2.0可能对混合负载有效。在work_mem参数值已经增加到40MB或者更多时,2.0-8.0或者更大范文内的更高设置可能会有效。

是否可session级修改

修改后何时生效

Session级修改立即生效其他修改Reload即可生效

1.38.7. maintenance_work_mem

参数名称

maintenance_work_mem

数据类型

integer

默认值

65536

取值范围

1024到2147483647

参数单位

KB

参数含义

指定用于维护操作(maintenance operations)的最大可用的内存。维护操作包括:vacuum,create index, ALTER TABLE ADD FOREIGN KEY.若指定本参数值时不带单位,那默认的单位是KB。较大的本参数值有助于提升vacuuming以及restore database时的性能。请注意:当autovacuum运行时,最多有本参数值\* autovacuum_max_workers的内存被使用,因此,请小心设置本参数值,不要设置太高。可以使用配置参数autovacuum_work_mem来单独控制autovacuum时的内存使用。

是否可session级修改

修改后何时生效

Session级修改立即生效其他修改Reload即可生效

1.38.8. autovacuum_work_mem

参数名称

autovacuum_work_mem

数据类型

integer

默认值

-1,-1表示使用maintenance_work_mem配置参数值

取值范围

-1到2147483647

参数单位

KB

参数含义

本参数用于设置每个autovacuum worker process使用的最大内存大小。若指定本参数值时不带单位,那默认的单位是KB。当vacuum的行为运行在其他上下文环境中时,本参数不生效。

是否可session级修改

修改后何时生效

Reload即可生效

1.38.9. logical_decoding_work_mem

参数名称

logical_decoding_work_mem

数据类型

integer

默认值

65536,即64MB

取值范围

64到2147483647

参数单位

KB

参数含义

本参数用于设置在解码后的变化写入到本地disk之前,逻辑解码使用的最大内存大小。本参数限制了逻辑流复制连接使用的内存大小。由于每个复制连接只使用此大小的单个buffer,并且通常不会有许多这样的连接(受到max_wal_senders配置参数限制)。因此可以将本参数值设置为比work_mem高,从而减少写入磁盘的解码变化量。

是否可session级修改

修改后何时生效

session级修改立即生效其他修改Reload即可生效

1.38.10. max_stack_depth

参数名称

max_stack_depth

数据类型

integer

默认值

2048

取值范围

100到2147483647

参数单位

KB

参数含义

本参数值指定PostgreSQL execution stack的最大安全深度。本参数值的理想设置是kernel执行的实际stack size limit(可以用操作系统命令ulimit -s或者ulimit -a进行查看)减去大约1MB的安全裕度。所以需要安全裕度,是因为并不是在服务器中的每个例程中都检查stack depth,而是只在可能递归的关键例程中检查stack depth。若指定本参数值时不带单位,那默认的单位是KB。本参数默认值为2MB,该值相对保守,不太可能有crash的风险。但是,它可能太小,无法执行复杂的函数。只有superuser才能更改此设置。本参数值设置为高于kernel的限制将意味着一个失控的递归函数可以crash掉一个单独的backend process。在PostgreSQL可以确定内核限制的平台上,服务器将不允许把本参数值设置为不安全的值。但是并非所有平台都提供该信息。因此建议谨慎选择本参数值。

是否可session级修改

是,仅限于superuser可进行session级修改。

修改后何时生效

session级修改立即生效其他修改Reload即可生效

1.38.11. shared_memory_type

参数名称

shared_memory_type

数据类型

enum

默认值

mmap

取值范围

{sysv,mmap,windows}, sysv,mmap适用于Linux平台;windows适用于windows平台。

参数单位

参数含义

指定shared memory的实现方式。 mmap是指使用mmap分配的anonymous shared memory; sysv是指通过shmget分配的 System V shared memory ;windows是指Windows shared memory。通常不鼓励使用sysv值,因为它通常需要非默认的内核设置来允许较大的分配,而sysv值在任何平台上都不是默认的。

是否可session级修改

修改后何时生效

重启PG instance生效

1.38.12. dynamic_shared_memory_type

参数名称

dynamic_shared_memory_type

数据类型

enum

默认值

posix

取值范围

{posix,sysv,mmap,windows} 其中posix,sysv,mmap适用于Linux平台;windows适用于Windows平台

参数单位

参数含义

指定PostgreSQL使用的dynamic shared memory的实现方式。 posix是指使用shm_open分配的POSIX shared memory; sysv是指使用shmget分配的System V shared memory; windows是指Windows shared memory; mmap是指使用存在的data directory中的memory-mapped files模拟的shared memory。通常不鼓励使用mmap值,这在任何平台上都不是默认值,因为操作系统可能会反复将修改过的页面写回磁盘,从而增加系统I/O负载;但是,当pg_dynshmem子目录存储在RAM磁盘上,或者其他共享内存工具不可用时,它可能对调试有用。

是否可session级修改

修改后何时生效

重启PG instance生效

1.39. Reporting and Logging / Where to Log

1.39.1. log_destination

参数名称

log_destination

数据类型

string

默认值

stderr

取值范围

Linux平台下的取值有:stderr、csvlog、syslogWindows平台下的取值有:stderr、csvlog、eventlog

参数单位

参数含义

PostgreSQL支持多种记录PostgreSQL消息的方法。包括stderr、csvlog、syslog,在windows平台下还有eventlog。当本参数值是一个列表时,请使用逗号分隔每个值。本参数仅能在postgresql.conf中设置或者在server command line中设置。当本参数值中含有csvlog时,日志条目被输出为csv格式(comma separated value),这便于程序加载log内容。需要将配置参数logging_collector设置为on才可以生成csv格式的log。当本参数值含有stderr或者csvlog时,current_logfiles文件被建立用来记录当前正在被logging collector进程使用的logfile的位置。这提供了一个查找当前正在使用的log的简便方法。 current_logfiles文件的内容如下(举例): stderr log/postgresql.log csvlog log/postgresql.csv当新的logfile被建立或者log_destination被加载时,current_logfiles文件会被重建。当本参数值不含有stderr或者csvlog,以及logging collector被禁用时,current_logfiles文件会被删除掉。

是否可session级修改

修改后何时生效

Reload即可生效

1.39.2. logging_collector

参数名称

logging_collector

数据类型

bool

默认值

off

取值范围

on和off

参数单位

参数含义

本参数会启用logging collector进程,该进程是一个background process,用来捕获发送到stderr的log messages并重定向这些信息到log file中。这个方法比记录到syslog中要有用。因为有些类型的messages不会显示在syslog的输出中(一个例子是dynamic-linker failure messages,另外一个是脚本产生的error messages,比如archive_command).本参数仅仅可以在PostgreSQL启动时设置。logging collector设计为永不丢失消息。这意味着在负载极高的情况下,当logging collector落后时,服务器进程可能会在尝试发送额外日志消息时被阻止。相反,syslog更喜欢在无法写入消息时丢弃消息,这意味着在这种情况下它可能无法记录某些消息,但不会阻塞系统的其余部分。

是否可session级修改

修改后何时生效

重启PG instance生效

1.39.3. log_directory

参数名称

log_directory

数据类型

string

默认值

log

取值范围

参数单位

参数含义

在logging_collector配置参数设置为on的情况下,本参数用于确定log file被建立在哪个目录下。本参数值可以是绝对路径,也可以是相对于data directory的相对路径。本参数仅能在postgresql.conf中设置或者在server command line中设置

是否可session级修改

修改后何时生效

Reload即可生效

1.39.4. log_filename

参数名称

log_filename

数据类型

string

默认值

postgresql-%Y-%m-%d_%H%M%S.log

取值范围

参数单位

参数含义

在logging_collector配置参数设置为on的情况下,本参数用于确定所创建的log file的文件名。本参数值被视为strftime pattern,因此可以使用%-escapes指定随时间变化的文件名(请注意,如果存在任何依赖于时区的%-转义,则计算将在配置参数log_timezone指定的时区中完成。)支持的%-转义与开放组的strftime规范中列出的那些类似。请注意,系统的strftime不是直接使用的,因此特定于平台(非标准)的扩展不起作用。如果本参数值中不带转义符,你应使用log rotation 工具以避免日志填充满整个磁盘。若是在log_destination配置参数中启用了csv格式的输出,那么会将.CSV附加到带时间戳的日志文件名. 以创建CSV格式输出的文件名(如果日志文件名以.log结尾,则替换后缀。)本参数仅能在postgresql.conf中设置或者在server command line中设置

是否可session级修改

修改后何时生效

Reload即可生效

1.39.5. log_file_mode

参数名称

log_file_mode

数据类型

string

默认值

0600, 0600表示只有PostgreSQL的owner可以读取或者写入log files

取值范围

0到511

参数单位

参数含义

在logging_collector配置参数设置为on的情况下,在Unix/Linux系统中本参数用于设置logfile的权限(在Microsoft Windows平台上,本参数被忽略)。 参数值应该是以chmod和umask系统调用接受的格式指定的数字模式。 0600表示只有PostgreSQL的owner可以读取或者写入log files.其他通常有用的设置是0640,0640允许owner的group的成员去读取log files。请注意,要使用这样的设置,您需要更改log_directory目录以将文件存储在data directory目录之外的某个位置。无论如何,让日志文件具有广泛的可读性是不明智的,因为它们可能包含敏感数据本参数仅能在postgresql.conf中设置或者在server command line中设置

是否可session级修改

修改后何时生效

Reload即可生效

1.39.6. log_rotation_age

参数名称

log_rotation_age

数据类型

integer

默认值

1440

取值范围

0到35791394,0表示禁用掉基于time的new log file创建。

参数单位

分钟

参数含义

在logging_collector配置参数设置为on的情况下,本参数确定了一个单独的log file能使用的最长时间。在将此数量的数据发送到日志文件后,将创建一个新的日志文件。若指定本参数值时不带单位,那默认的单位是分钟。默认值是24小时。本参数仅能在postgresql.conf中设置或者在server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.39.7. log_rotation_size

参数名称

log_rotation_size

数据类型

integer

默认值

10240

取值范围

0到2097151,0表示禁用掉基于size的new log file创建

参数单位

参数含义

在logging_collector配置参数设置为on的情况下,本参数确定了一个单独的log file能使用的最大大小。将此数量的数据发送到日志文件后,将创建一个新的日志文件。若指定本参数值时不带单位,那默认的单位是KB。默认值是10MB。本参数仅能在postgresql.conf中设置或者在server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.39.8. log_truncate_on_rotation

参数名称

log_truncate_on_rotation

数据类型

bool

默认值

off

取值范围

on和off

参数单位

参数含义

在logging_collector配置参数设置为on的情况下,本参数将导致PostgreSQL截断(覆盖)而不是附加到任何同名的现有日志文件。请注意,只有在由于基于time(时间)的rotate而打开新文件时才会发生截断,而不是在服务器启动或基于size的rotate期间。当本参数值设置off时,在所有情况下都会附加到已有文件中。将本参数值与日志文件名(如postgresql-%H.log)结合使用会生成24个每小时一次的日志文件,然后周期性地覆盖它们。本参数仅能在postgresql.conf中设置或者在server command line中设置。举例:为了达到如下目的:保留7天的log,每天的log文件的文件名是server_log.Mon,server_log.Tue等等,然后用本周的log自动覆盖上周的log。该需求需要设置log_filename为server_log.%a, log_truncate_on_rotation为on,log_rotation_age为1440举例:为了达到如下目的:保留24小时的log,每小时一个log file,如果log file大小超过1GB时也需要很快进行rotate。该需求需要设置log_filename为server_log.%H%M, log_truncate_on_rotation为on,log_rotation_age为60,log_rotation_size为1000000.在log_filename中包括%M允许任何基于size的且可能在同一个小时内有多个log file的rotate

是否可session级修改

修改后何时生效

Reload即可生效

1.39.9. syslog_facility

参数名称

syslog_facility

数据类型

enum

默认值

local0

取值范围

{local0,local1,local2,local3,local4,local5,local6,local7}

参数单位

参数含义

当配置参数log_destination被设置为syslog时,本参数用于确定使用的syslog facility。本参数仅能在postgresql.conf中设置或者在server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.39.10. syslog_ident

参数名称

syslog_ident

数据类型

string

默认值

postgres

取值范围

参数单位

参数含义

本参数设置了在操作系统syslog日志中用于标识PostgreSQL消息的关键字。本参数仅仅适用于Linux平台,因为只有Linux平台才有syslog.虽然在Windows平台下也能修改本参数值,但是该修改没有任何意义。本参数仅能在postgresql.conf中设置或者在server command line中设置

是否可session级修改

修改后何时生效

Reload即可生效

1.39.11. syslog_sequence_numbers

参数名称

syslog_sequence_numbers

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

当配置参数log_destination被设置为syslog并且本参数值设置为on时,PostgreSQL会在每条消息的前面加一个依次增大的顺序号,同一个命令的多条输出会以[2-1],[2-2]之类的次序标出:(如下截取自linux的/var/log/messages)image::PostgreSQL13%E6%96%87%E6%A1%A3%E4%B9%8BPG%E5%8F%82%E6%95%B0%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C_html_b376f05a85e6462b.png["",357,140]
本参数设置为off的效果如下:(如下截取自linux的/var/log/messages)image::PostgreSQL13%E6%96%87%E6%A1%A3%E4%B9%8BPG%E5%8F%82%E6%95%B0%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C_html_340e68e94edcda77.png["",361,131]本参数仅能在postgresql.conf中设置或者在server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.39.12. syslog_split_messages

参数名称

syslog_split_messages

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

当配置参数log_destination被设置为syslog并且本参数值设置为on时,消息被按行分割,长的行会被分割,以便填满1024Bytes,这是传统syslog实现上的典型大小限制。当设置为off时,PostgreSQL日志消息将按照原样传递给syslog服务,并由syslog服务来处理可能非常庞大的消息。如果syslog最终记录到一个文本文件中,那么无论哪种方式,效果都是一样的,最好保持该设置处于on状态,因为大多数syslog实现要么不能处理大型消息,要么需要专门配置来处理它们。但是,如果syslog最终要写入其他介质,那么将消息逻辑地保持在一起可能是必要的或更有用的。本参数仅能在postgresql.conf中设置或者在server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.39.13. event_source

参数名称

event_source

数据类型

bool

默认值

PostgreSQL

取值范围

参数单位

参数含义

本参数仅仅适用于Windows平台,因为只有Windows平台才有event log,本参数值会体现在Windows操作系统的事件查看器的"Windows日志"-"应用程序"-"来源"一列。虽然在Linux平台下也能修改本参数值,但是该修改没有任何意义。本参数仅能在postgresql.conf中设置或者在server command line中设置。

是否可session级修改

修改后何时生效

重启PG instance生效

1.40. Preset Options

1.40.1. block_size

参数名称

block_size

数据类型

Integer

默认值

8192

取值范围

8192

参数单位

参数含义

数据库使用的disk block的大小,该参数也影响其他的配置参数,比如shared_buffers,该参数通过编译时./configure命令的—​with-blocksize选项确定

是否可session级修改

否,不可修改。

修改后何时生效

不可修改。

1.40.2. data_checksums

参数名称

data_checksums

数据类型

bool

默认值

off

取值范围

on和off

参数单位

参数含义

显示data checksums是否启用。本参数值通过initdb时的-k选项或者—​data-checksums选项确定。本参数值可以使用pg_checksums进行修改,pg_checksums命令具体用法请见pg_checksums --help

是否可session级修改

修改后何时生效

立即生效

1.40.3. data_directory_mode

参数名称

data_directory_mode

数据类型

integer

默认值

0700

取值范围

0到511

参数单位

参数含义

在linux/unix中显示data_directory参数值对应的目录的权限;在windows系统中,本参数值总是显示为0700

是否可session级修改

修改后何时生效

不可修改

1.40.4. debug_assertions

参数名称

debug_assertions

数据类型

bool

默认值

off

取值范围

on和off

参数单位

参数含义

显示PG在编译时是否启用assertion。本参数值通过编译时./configure命令的—​enable-cassert选项确定。

是否可session级修改

修改后何时生效

不可修改

1.40.5. integer_datetimes

参数名称

integer_datetimes

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

支持64bit整型的date和time。本参数通过编译时./configure命令确定。注意:configure的—​disable-integer-datetimes选项,是"obsolete option, no longer supported"

是否可session级修改

修改后何时生效

不可修改

1.40.6. lc_collate

参数名称

lc_collate

数据类型

string

默认值

en_US.UTF-8(根据操作系统环境变量不同而不同,见os命令locale的返回结果)

取值范围

参数单位

参数含义

字符串的排序规则(String sort order)。本参数值通过initdb时的—​lc-collate确定,若是不指定该选项,initdb会取环境变量

是否可session级修改

修改后何时生效

在PG Database级别确定,确定后不可修改,只读参数

1.40.7. lc_ctype

参数名称

lc_ctype

数据类型

string

默认值

en_US.UTF-8(根据操作系统环境变量不同而不同,见os命令locale的返回结果)

取值范围

参数单位

参数含义

字符分类(是否区分大小写,什么是字符等)。本参数通过initdb时的—​lc-ctype确定,若是不指定该选项,initdb会取环境变量

是否可session级修改

修改后何时生效

在PG Database级别确定,确定后不可修改,只读参数。

1.40.8. max_function_args

参数名称

max_function_args

数据类型

integer

默认值

100

取值范围

参数单位

参数含义

返回函数参数的最大个数,

是否可session级修改

修改后何时生效

不可修改,只读参数

1.40.9. max_identifier_length

参数名称

max_identifier_length

数据类型

integer

默认值

63

取值范围

参数单位

参数含义

返回标识符的最大长度

是否可session级修改

修改后何时生效

不可修改,只读参数

1.40.10. max_index_keys

参数名称

max_index_keys

数据类型

integer

默认值

32

取值范围

参数单位

参数含义

一个index最多能含有多少列

是否可session级修改

修改后何时生效

不可修改,只读参数

1.40.11. segment_size

参数名称

segment_size

数据类型

integer

默认值

131072

取值范围

参数单位

8KB

参数含义

本参数值确定了每个disk file中的page的数量。本参数值通过编译时./configure命令执行的—​with-segsize=SEGSIZE选项确定。

是否可session级修改

修改后何时生效

不可修改,只读参数

1.40.12. server_encoding

参数名称

server_encoding

数据类型

string

默认值

UTF8

取值范围

参数单位

参数含义

数据库的编码 (即:字符集),本参数通过initdb时的-E或者—​encoding参数确定。

是否可session级修改

修改后何时生效

不可修改,只读参数

1.40.13. server_version

参数名称

server_version

数据类型

string

默认值

默认值是当前PostgreSQL版本,格式为主版本号.次版本号

取值范围

参数单位

参数含义

返回PostgreSQL的版本号

是否可session级修改

修改后何时生效

不可修改,只读参数

1.40.14. server_version_num

参数名称

server_version_num

数据类型

integer

默认值

130000,返回主版本号

取值范围

参数单位

参数含义

返回PostgreSQL的版本号

是否可session级修改

修改后何时生效

不可修改,只读参数

1.40.15. ssl_library

参数名称

ssl_library

数据类型

string

默认值

OpenSSL

取值范围

参数单位

参数含义

返回PostgreSQL软件编译时的SSL library。本参数值通过./configure的—​with-openssl选项确定。

是否可session级修改

修改后何时生效

不可修改,只读参数

1.40.16. wal_block_size

参数名称

wal_block_size

数据类型

integer

默认值

8192

取值范围

参数单位

参数含义

返回WAL中disk block的大小。本参数值通过./configure的—​with-wal-blocksize选项确定。

是否可session级修改

修改后何时生效

不可修改,只读参数

1.40.17. wal_segment_size

参数名称

wal_segment_size

数据类型

string

默认值

16777216

取值范围

参数单位

Byte

参数含义

返回WAL Segments的大小。本参数值通过initdb的—​wal-segsize选项确定。

是否可session级修改

修改后何时生效

不可修改,只读参数

1.41. Client Connection Defaults / Locale and Formatting

1.41.1. DateStyle

参数名称

DateStyle

数据类型

string

默认值

ISO, MDY

取值范围

参数单位

参数含义

本参数用于设置date和time的显示格式,以及解释不明确日期输入值的规则。由于历史原因,本参数值包括两个部分:第一部分:output format specification (ISO, Postgres, SQL, or German);第二部分:the input/output specification for year/month/day ordering (DMY, MDY, or YMD)。上述两者可以单独设置,也可以一起设置。请注意,关键词Euro和European是DMY的同义词;关键词US和NonEnro是MDY的同义词;Initdb生成配置参数文件时,会根据os的locale命令的lc_time结果来设置本参数值。

是否可session级修改

修改后何时生效

Reload即可生效

1.41.2. IntervalStyle

参数名称

IntervalStyle

数据类型

enum

默认值

postgres

取值范围

postgres,postgres_verbose,sql_standard,iso_8601

参数单位

参数含义

本参数用于设置interval values的显示格式。参数值sql_standard表示产生匹配SQL标准interval常量的输出;参数值postgres表示当DateStyle参数值设置为ISO时,产生匹配PostgreSQL8.4版本之前的输出;参数值postgres_verbose表示当DateStyle参数值设置为非ISO时,表示当DateStyle参数值设置为ISO时,参数值iso_8601表示产生匹配在ISO 8601标准的4.4.3.2章节中定义的时间间隔带"format with designators"匹配的输出。本参数值也会影响模糊的interval输入的解释。

是否可session级修改

修改后何时生效

Reload即可生效

1.41.3. TimeZone

参数名称

TimeZone

数据类型

String

默认值

内置的默认值是GMT,一般情况下,本参数值依据initdb时的操作系统时区而定,即:initdb时的操作系统时区是什么,initdb后postgresql.conf中的本参数值就是什么。注意:CentoOS7/8的操作系统当前时区请使用操作系统命令timedatectl status查询。

取值范围

参数单位

参数含义

为显示以及翻译timestamp设置时区。可用的时区名称可以通过pg_timezone_names视图进行查询。

是否可session级修改

修改后何时生效

Reload即可生效

1.41.4. timezone_abbreviations

参数名称

timezone_abbreviations

数据类型

string

默认值

Default

取值范围

参数单位

参数含义

被PostgreSQL接受的datetime输入的时区简写。默认值Default在世界上大部分地区都有效。另外的有效值是Australia和India。

是否可session级修改

修改后何时生效

Reload即可生效

1.41.5. extra_float_digits

参数名称

extra_float_digits

数据类型

string

默认值

1

取值范围

-15到3

参数单位

参数含义

设置浮点值(float4,float8以及地理数据类型)的显示的位数。extra_float_digits大于0时,原有精度最多增加3位, 小于0时, 精度最多减掉相应数值, 等于0时, float4精度为6位, float8精度为15

是否可session级修改

修改后何时生效

Reload即可生效

1.41.6. client_encoding

参数名称

client_encoding

数据类型

string

默认值

取自Database encoding

取值范围

参数单位

参数含义

本参数用于设置客户端字符集。

是否可session级修改

修改后何时生效

Reload即可生效。

1.41.7. lc_messages

参数名称

lc_messages

数据类型

string

默认值

与系统locale设置有关

取值范围

参数单位

参数含义

本参数用于设置消息显示的语言。可接受的参数值是跟系统相关的。本参数值会影响发送到服务器运行日志以及客户端的消息,不正确的本参数值会影响服务器日志的可读性。

是否可session级修改

修改后何时生效

Reload即可生效,且只有超级用户才能更改此设置。

1.41.8. lc_monetary

参数名称

lc_monetary

数据类型

string

默认值

与系统locale设置有关

取值范围

参数单位

参数含义

设置用于格式化货币金额的语言环境,可接受的参数值是跟系统相关的。

是否可session级修改

修改后何时生效

Reload即可生效

1.41.9. lc_numeric

参数名称

lc_numeric

数据类型

string

默认值

与系统locale设置有关

取值范围

参数单位

参数含义

本参数值用于设置格式化数字。可接受的参数值是跟系统相关的。

是否可session级修改

修改后何时生效

Reload即可生效

1.41.10. lc_time

参数名称

lc_time

数据类型

string

默认值

取值范围

参数单位

参数含义

本参数值用于设置格式化的日期和时间。可接受的参数值是跟系统相关的。

是否可session级修改

修改后何时生效

Reload即可生效

1.41.11. default_text_search_config

参数名称

default_text_search_config

数据类型

string

默认值

依据initdb时的lc_ctype对应的设置而定

取值范围

参数单位

参数含义

本参数值用于设置当全文检索函数中不明确指定配置项时所用的全文检索配置项。

是否可session级修改

修改后何时生效

Reload即可生效

1.42. Write-Ahead Log / Settings

1.42.1. wal_level

参数名称

wal_level

数据类型

enum

默认值

replica

取值范围

{minimal,replica,logical}

参数单位

参数含义

本参数定义了有多少信息被写入到WAL日志中。参数值replica表示WAL日志中写入了足够的信息以支持WAL Archiving和replicatin(包括在standby server上的read-only查询),参数值minimal表示WAL日志中移除了除了需要从crash或者immeidate shutdown进行recovery之外的信息。参数值logical添加了必要信息以支持逻辑解码(logical decoding),在本参数使用logical参数值的情况下,会使得WAL日志的数量变大,特别是很多表被配置为replica identity full并且很多delete和update被执行的情况下。本参数仅仅可以在PostgreSQL Start时修改。每个更高级别的参数值会包括更低级别参数值中记录的所有内容。但是最少的WAL不能包含足够的信息来从基本备份和WAL日志中重建数据,因此必须使用replica参数值来提供更多的信息以启用WAL归档(archive_mode)和流复制.在9.6之前的版本中,此参数值还可以是archive和hot_standby。在PG13版本中,这些仍被接受,但已映射到replica参数值上。当本参数设置为minimal时,如下操作会更快,因为如下操作在创建或重写它们的事务的其余部分中,没有记录永久关系的信息: ALTER …​ SET TABLESPACE CLUSTER CREATE TABLE REFRESH MATERIALIZED VIEW(无CONCURRENTLY) REINDEX TRUNCATE

是否可session级修改

修改后何时生效

重启PG instance生效

1.42.2. fsync

参数名称

fsync

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

当本参数值为on时,通过发出fsync系统调用或者各种等价的方法(参见wal_sync_method配置参数),PostgreSQL会尝试确保更新被物理的写入disk。这就保证了PostgreSQL Cluster可以在操作系统或者硬件crash之后能recover(恢复)到一个一致的状态。当本参数值为off时,会带来性能优势,在电源故障或者系统crash时,这会导致不可恢复的数据损坏。仅仅当数据库的全部数据来源自外部数据的情况下,才建议将本参数值设置为off关闭fsync的场景包括:从备份文件中加载数据到PG中;使用PG进行数据的批处理,然后数据库会被废弃并重建;一个经常被重建的只读数据库克隆,并且不会用于failover.高质量的硬件不足以让本参数值设置为off基于可靠恢复的原因将本参数值从off改为on时,需要强制将kernel中修改过的buffer刷新到持久存储中,可以通过如下方法达到本目的: PostgreSQL Cluster关闭;当fsync参数值为on时运行initdb –sync-only,运行sync操作系统命令,unmount掉文件系统或者重启服务器操作系统。在很多场景中,针对非关键事务将synchronous_commit参数值设置为off可以提供比将fsync参数值设置为off更大的潜在优势,不会造成数据损坏等风险。本参数值只能在postgresql.conf文件或server command line中设置。如果关闭此参数,请考虑关闭full_page_writes。

是否可session级修改

修改后何时生效

Reload即可生效

1.42.3. synchronous_commit

参数名称

synchronous_commit

数据类型

enum

默认值

on

取值范围

{local,remote_write,remote_apply,on,off}

参数单位

参数含义

本参数值指定了在PostgreSQL数据库返回一个成功的提示给客户端之前,必须处理多少WAL数据。如果synchronous_standby_names是空,那么本参数有意义的参数值为on和off;remote_apply、remote_write、和local提供了与on参数值一样的本地同步级别。所有非off模式的本地行为是等待本地WAL刷新到Disk中。在off模式下,没有等待,因此存在一个延迟,这个延迟是给client报告成功与以后保证事务安全以防server crash之间的延迟(最大的延迟是三倍的wal_writer_delay参数值)。与fsync参数值不同,将此参数设置为off不会造成数据库不一致的任何风险。操作系统或者数据库的crash可能会导致一些最近据称已提交的事务丢失,但数据库状态将与这些事务完全中止时的状态相同,因此,当性能比事务持久性的精确确定性更重要时,将本参数设置为off是一个有用的选择。如果synchronous_standby_names是非空,本参数值用来控制事务提交是否等待在standby server上的WAL Record被处理。
当本参数值为remote_apply时,commit会等待直到从当前的同步standby指示它们已经收到事务的commit record并应用( applied),因此,它可以在standby 端被query可见,并且在standby端被写入持久性的存储中。这会导致比之前设置的更大的提交延迟,因为primary端会等standby端的WAL replay。
当本参数值为on时,commit会等待直到当前同步standby指示已经收到事务的commit record并且已经flush到持久性存储中。这确保了事务不会丢失,除非primary端和所有同步standby端的存储都发生损坏。
当本参数值为remote_write时,commit会等待直到当前同步standby指示已经收到事务的commit record并且已经写入到它们的文件系统中。本参数确保了在一个PostgreSQL 实例crash之后的数据持久,但是不针对standby端的操作系统级别的crash,因为,数据在standby端可能没有flush到持久性存储中。当参数值为local时,会导致commits一直在等待直到local flush到disk,而不是复制。当同步复制使用时,通常不需要这么做,但是为了完整而提供了这种方法。
此参数可随时更改;任何一个事务的行为都由提交时生效的设置决定。因此,让一些事务同步提交,而其他事务异步提交是可能的,也是有用的。例如,要在默认值相反时使单个多语句事务异步提交,请在事务中发出SET LOCAL synchronous_commit TO OFF

是否可session级修改

修改后何时生效

Reload即可生效

1.42.4. wal_sync_method

参数名称

wal_sync_method

数据类型

enum

默认值

Linux和FreeBSD下默认值是fdatasyncWindows下默认值是open_datasync

取值范围

{fsync,fdatasync,open_sync,open_datasync}

参数单位

参数含义

本参数值指定了强制将WAL写入Disk时使用的方法。当fsync参数值为off时,本参数值无关紧要。 open_datasync:使用open()的O_DSYNC选项写WAL Files fdatasync:每次commit时调用fdatasync() fsync:每次commit时调用fsync() fsync_writethrough:每次commit时调用fsync(),对disk write cache强制write-through open_sync:使用open()的O_SYNC选项写WAL Files
open_*选项使用O_DIRECT(若是可用),不是上述所有选项都在所有平台下可用。默认值是在该平台下支持的上述列表中的第一个方法,除了在Linux平台和FreeBSD平台下fdatasync是默认值。默认值不一定理想,可能有必要更次此设置或系统配置的其他方面,以创建crash的安全配置或实现最佳性能。本参数值只能在postgresql.conf文件或server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.42.5. full_page_writes

参数名称

full_page_writes

数据类型

bool

默认值

on

取值范围

参数单位

参数含义

当本参数值为on时,在一个checkpoint发生之后,当第一个修改发生时,将full page(即:该修改所在的disk page中的全部内容)写入WAL日志中。这是需要的,因为在操作系统crash期间正在进行的page write可能仅部分完成,从而导致磁盘上的页包含新旧数据的混合。通常存储在WAL中的行级更改数据不足以在crash之后的恢复中完全还原一个page。存储full page image可以保证页面可以正确还原,但代价是增加必须写入WAL的数据量(因为WAL replay总是从检查点开始,所以在检查点之后的每个页面的第一次更改期间这样做就足够了。因此,降低整页写入成本的一种方法是增加checkpoint interval参数。)关闭此参数可加快正常操作,但在系统发生故障后,可能会导致不可恢复的数据损坏或静默数据损坏。风险类似于关闭fsync,虽然较小,但应该仅基于为fsync参数建议的相同情况关闭本参数。关闭此参数不会影响将WAL存档用于时间点恢复(PITR)。此参数只能在postgresql.conf文件或server command line中设置

是否可session级修改

修改后何时生效

Reload即可生效

1.42.6. wal_log_hints

参数名称

wal_log_hints

数据类型

bool

默认值

off

取值范围

参数单位

参数含义

当本参数值设置为on时,在一个checkpoint发生之后,当第一个修改发生时,将full page(即:该修改所在的disk page中的全部内容)写入WAL日志中。即使对于所谓的提示位的非关键修改也是如此。如果data ckecksums被启用,hint bit updates总是被记录在wal中,此时本参数值被忽略。你可以使用本参数值来测试当数据库cluster启用checksum之后的会生成多少额外的wal-logging.本参数仅能在server start时设置。

是否可session级修改

修改后何时生效

PG instance重启生效

1.42.7. wal_compression

参数名称

wal_compression

数据类型

bool

默认值

off

取值范围

on和off

参数单位

参数含义

当本参数值为on时,在如下情况下PostgreSQL压缩一个全部的page image并写入到WAL中:full_page_writes参数值为on或者执行一次base backup。压缩的page image会在wal replay期间进行解压。启用本参数可以降低WAL日志的产生量而不会增加不可恢复的数据损坏的风险,但是在wal压缩以及解压过程中会有额外的cpu消耗。

是否可session级修改

是,仅限于superuser

修改后何时生效

Session级修改立即生效,非session修改relaod生效

1.42.8. wal_init_zero

参数名称

wal_init_zero

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

当本参数值为on时,会导致新的wal file以零填充,在某些文件系统中,这确保了在需要写入wal records之前的空间已被分配。但是,Copy-On-Write (COW)文件系统不会从本参数中获益,因此可以选择跳过不必要的工作。如果设置为off,则在创建文件时仅写入最后一个字节,以使其具有预期的大小。

是否可session级修改

是,仅限于superuser

修改后何时生效

Session级修改立即生效,非session修改relaod生效

1.42.9. wal_recycle

参数名称

wal_recycle

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

本参数值为on时,会导致wal file被循环使用(通过renaming wal file的方式),避免了创建新wal file的需要。在COW文件系统中,本参数可能让create new wal file更快。

是否可session级修改

是,仅限于superuser

修改后何时生效

Session级修改立即生效,非session修改relaod生效

1.42.10. wal_buffers

参数名称

wal_buffers

数据类型

integer

默认值

-1,即:shared_buffers配置参数值的1/32大小,不小于64KB也不大于一个wal segment大小。请注意这是默认值的取值范围,不是手工设置本参数值的取值范围。

取值范围

-1到262143

参数单位

8KB

参数含义

分配给尚未写入到disk中的wal data的共享内存大小;如果自动选择太大或太小,则可以手动设置本参数值,但是任何小于32 KB的正数参数值.将被视为32 KB.如果指定的该值不带单位,则单位是WAL块的个数,即源码中符号常量XLOG_BLCKSZ,通常为8KB. 本参数值只能在服务器启动时设置。当每次事务提交时,wal buffer中的内容都会被写入disk中,因此,极大的本参数值不可能带来显著的益处。

是否可session级修改

修改后何时生效

PG instance重启生效

1.42.11. wal_writer_delay

参数名称

wal_writer_delay

数据类型

integer

默认值

200

取值范围

1到10000

参数单位

毫秒

参数含义

指定了wal writer进程写wal buffer到disk中的频率,以时间去衡量,当wal writer进程flush wal之后,wal writer进程会休眠本参数值一段时间,除非被一个异步提交事务很快唤醒。如果最后一次flush在小于wal_writer_delay参数值之前发生 以及 小于wal_writer_flush_after参数值对应的WAL生成量,那么WAL被写入操作系统而不是flush到disk中。请注意,在很多操作系统中,sleep delays的有效精度是10毫秒,

是否可session级修改

修改后何时生效

Reload即可生效

1.42.12. wal_writer_flush_after

参数名称

wal_writer_flush_after

数据类型

Integer

默认值

128,即128*8KB=1MB

取值范围

0到2147483647

参数单位

8KB

参数含义

本参数值指定了wal writer进程flush wal的频率,以wal的大小来衡量。如果最后一次flush在小于wal_writer_delay参数值之前发生 以及 小于wal_writer_flush_after参数值对应的WAL生成量,那么WAL被写入操作系统而不是flush到disk中。本参数值为0代表wal data总是被立即被flush到disk中。如果指定的该值不带单位,则单位是WAL块的个数,即源码中符号常量XLOG_BLCKSZ,通常为8KB. 本参数值只能在postgresql.conf或者server command line中设置

是否可session级修改

修改后何时生效

Reload即可生效

1.42.13. wal_skip_threshold

参数名称

wal_skip_threshold

数据类型

Integer

默认值

2048

取值范围

0到2147483647

参数单位

KB

参数含义

当wal_level参数值为minimal并且在create或者rewriting一个永久关系之后进行事务提交,本参数控制怎么持久化新的数据。如果数据小于本参数值,PostgreSQL会将这些数据写入wal log,否则,PostgreSQL会针对受影响的文件使用一个fsync。取决于你的存储属性,如果这些commit正在拖慢并发事务,增大或者降低本参数值可能会有帮助. 本参数值不带单位时,默认以KB为单位。

是否可session级修改

修改后何时生效

Reload即可生效。

1.42.14. commit_delay

参数名称

commit_delay

数据类型

Integer

默认值

0,零表示没有延迟。

取值范围

0到100000

参数单位

毫秒

参数含义

设置本参数值会增加在wal flush启动之前的延迟。如果系统负载足够高以至于在给定的时间间隔内准备好提交其他事务,则这可以通过允许经由单个 WAL flush以提交大量事务来提高组提交吞吐量。但是,每次wal flush会增加延迟,最大延迟是本参数指指定的时间。如果没有其他事务会变成准备提交状态,延迟的时间是被浪费的,因此,如果当wal flush被初始化时,至少有commit_siblings个其他事务是active的情况下,延迟才被执行。同样,如果fsync被关闭,delay是不会被执行的。

是否可session级修改

是,仅限于superuser

修改后何时生效

Session级修改立即生效,其他修改reload生效

1.42.15. commit_siblings

参数名称

commit_siblings

数据类型

Integer

默认值

5

取值范围

0到1000

参数单位

参数含义

在执行配置参数commit_delay指定的延迟之前,需要的最小的并发打开的事务数。值越大,在延迟间隔期间至少有一个其他事务准备好提交的可能性就越大

是否可session级修改

修改后何时生效

Reload即可生效

1.43. Developer Options

1.43.1. allow_system_table_mods

参数名称

allow_system_table_mods

数据类型

bool

默认值

off

取值范围

on和off

参数单位

参数含义

允许修改系统表的结构以及对系统表进行某些其他有风险的操作。否则即使对于超级用户也是不允许的。不明智地使用此设置可能会导致无法挽回的数据丢失或严重损坏数据库系统。只有超级用户才能更改此设置。

是否可session级修改

是,仅限于superuser

修改后何时生效

Session级修改立即生效,其他修改reload生效

1.43.2. backtrace_functions

参数名称

backtrace_functions

数据类型

string

默认值

空字符串

取值范围

参数单位

参数含义

本参数值是以逗号分隔的C函数名称。如果一个错误被抛出并且错误发生地方的内部C函数名称与本参数值list中的值相匹配,然后backtrace与error message会被写入server log。不是所有的平台都支持backtrace功能,backtrace的质量取决于编译选项。

是否可session级修改

是,仅限于superuser

修改后何时生效

Session级修改立即生效,其他修改reload生效

1.43.3. ignore_system_indexes

参数名称

ignore_system_indexes

数据类型

boolean

默认值

off

取值范围

off和on

参数单位

参数含义

当读取system table时忽略system index(但是当修改表时,依然会更新索引)。本参数用于从损坏的索引中恢复的场景中。本参数当session启动后无法改变

是否可session级修改

修改后何时生效

Reload即可生效,但是仅仅针对reload之后的新session生效。

1.43.4. post_auth_delay

参数名称

post_auth_delay

数据类型

Integer

默认值

0,零表示禁用延迟。

取值范围

0到2147

参数单位

参数含义

在PostgreSQL构建认证阶段之后,当一个新server process被fork出来时的延迟的时间。本参数值用来给开发人员一个用debugger attach到server process的机会。

是否可session级修改

修改后何时生效

Reload即可生效,但是仅仅针对reload之后的新session生效。

1.43.5. pre_auth_delay

参数名称

pre_auth_delay

数据类型

Integer

默认值

0,零表示禁用延迟。

取值范围

0到60

参数单位

参数含义

在PostgreSQL构建认证阶段之前,在一个新server process被fork出来之后的延迟的时间。本参数值用来给开发人员一个使用debugger attach到server process以跟踪在认证阶段异常行为的机会。本参数只能在postgresql.conf中或者server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.43.6. trace_notify

参数名称

trace_notify

数据类型

bool

默认值

off

取值范围

off和on

参数单位

参数含义

为LISTEN和NOTIFY命令生成大量的debugging输出。配置参数client_min_messages或者log_min_messages必须设置为DEBUG1或者更低才能发送该输出到client或者server log

是否可session级修改

修改后何时生效

Reload即可生效

1.43.7. trace_recovery_messages

参数名称

trace_recovery_messages

数据类型

enum

默认值

log,log不会影响log决策

取值范围

{debug5,debug4,debug3,debug2,debug1,log,notice,warning,error}

参数单位

参数含义

启用记录恢复相关的调试输出,否则将不会被记录。此参数允许用户覆盖log_min_messages的正常设置,但仅限于特定消息。本参数的目的是调试hot standby。其他值导致该优先级或更高优先级的与恢复相关的调试消息被记录,就好像它们具有LOG优先级一样。针对配置参数log_min_messages的通用设置会导致无条件发送messages到server log中。本参数只能在postgresql.conf中或者server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.43.8. trace_sort

参数名称

trace_sort

数据类型

bool

默认值

off

取值范围

off和on

参数单位

参数含义

当本参数值为on时,在sort操作期间,会发出有关资源使用的信息。本参数仅仅针对PostgreSQL编译时TRACE_SORT macro被定义时才有效(默认情况下,TRACE_SORT是被定义的)

是否可session级修改

修改后何时生效

Reload即可生效

1.43.9. trace_locks

参数名称

trace_locks

数据类型

bool

默认值

取值范围

参数单位

参数含义

是否可session级修改

修改后何时生效

1.43.10. trace_lwlocks

参数名称

trace_lwlocks

数据类型

默认值

取值范围

参数单位

参数含义

是否可session级修改

修改后何时生效

1.43.11. trace_userlocks

参数名称

trace_userlocks

数据类型

默认值

取值范围

参数单位

参数含义

是否可session级修改

修改后何时生效

1.43.12. trace_lock_oidmin

参数名称

trace_lock_oidmin

数据类型

默认值

取值范围

参数单位

参数含义

是否可session级修改

修改后何时生效

1.43.13. trace_lock_table

参数名称

trace_lock_table

数据类型

默认值

取值范围

参数单位

参数含义

是否可session级修改

修改后何时生效

1.43.14. debug_deadlocks

参数名称

debug_deadlocks

数据类型

默认值

取值范围

参数单位

参数含义

是否可session级修改

修改后何时生效

1.43.15. log_btree_build_stats

参数名称

log_btree_build_stats

数据类型

默认值

取值范围

参数单位

参数含义

是否可session级修改

修改后何时生效

1.43.16. wal_consistency_checking

参数名称

wal_consistency_checking

数据类型

String

默认值

空串,空串意味着禁用本特性。

取值范围

参数单位

参数含义

本参数的目的是检查WAL redo routine中的错误。当启用本参数时,与WAL记录一起修改的任何buffer的full page image都会添加到记录中。如果该记录随后被重放,系统将首先应用每个记录,然后测试由该记录修改的buffer是否与存储的image匹配。在某些情况下(如提示位),可以接受较小的变化,并将被忽略。任何意外的差异都将导致致命错误,从而终止恢复。本参数值可以设置为all,all表示检查所有记录,本参数值也可以设置为逗号分隔的resource manager列表,受到支持的resource manager 是heap、heap2、btree、hash、gin、gist、sequence、spgist、brin、generic

是否可session级修改

是,仅限于superuser进行修改

修改后何时生效

Reload即可生效

1.43.17. wal_debug

参数名称

wal_debug

数据类型

bool

默认值

取值范围

参数单位

参数含义

当设置为on时,发出与wal相关的debugging out。本参数仅仅当PostgreSQL编译时定义了WAL_DEBUG macro的情况下才适用。

是否可session级修改

修改后何时生效

1.43.18. ignore_checksum_failure

参数名称

ignore_checksum_failure

数据类型

bool

默认值

off

取值范围

off和on

参数单位

参数含义

本参数仅仅在data checksums启用的情况下才生效。在读取过程中检查到checksum失败通常会导致PostgreSQL报告一个error,从而中止当前事务。本参数值设置为on会导致PostgreSQL忽略故障(但是依然会报告警告)并继续处理。此行为可能导致crash、传播或隐藏corruption或其他严重问题。但是,如果block header是正常的,可能允许您越过错误并检索可能仍然存在于表中的未损坏的tuple。如果block header已损坏,那么即使启用本选项,也会报告错误。

是否可session级修改

是,仅限于superuser在session级修改

修改后何时生效

Reload即可生效

1.43.19. zero_damaged_pages

参数名称

zero_damaged_pages

数据类型

bool

默认值

off

取值范围

on和off

参数单位

参数含义

检测到一个损坏的page header通常会导致PostgreSQL报错一个error,并终止当前事务。设置本参数值为on会导致系统报告warning,将内存中损坏的页面清零,然后继续处理。这种行为会破坏数据,即:损坏页面上的所有行。但是,本参数确实允许您克服错误并从表中可能存在的任何未损坏的页面中检索行。如果由于硬件或软件错误而发生损坏,它对于恢复数据很有用。在您放弃从表的损坏页恢复数据的希望之前,您通常不应设置本参数。。清零页不会被强制写入磁盘,因此建议在再次关闭此参数之前重新创建表或索引。本参数值只能由超级用户更改。

是否可session级修改

是,仅限于superuser

修改后何时生效

Reload即可生效

1.43.20. ignore_invalid_pages

参数名称

ignore_invalid_pages

数据类型

bool

默认值

off

取值范围

on和off

参数单位

参数含义

当本参数值是off时,在recovery期间检测wal record中存在invalid pages之后,PostgreSQL会发出一个PANIC-level的error,进而会终止recovery。当本参数值设置为on时会导致PostgreSQL忽略wal record中的invalid pages(但是依然会报warning)继续进行recovery。本行为可能会导致crash,data loss,传播或者隐藏corruption,或者其他严重问题。但是,本参数会允许你绕过的PANIC-level的error,进而完成recovery,进而启动PostgreSQL。本参数仅能在PostgreSQL启动时设置。本参数仅仅在recovery或者standby mode下生效。

是否可session级修改

修改后何时生效

重启PG instance生效

1.43.21. jit_debugging_support

参数名称

jit_debugging_support

数据类型

bool

默认值

off

取值范围

off和on

参数单位

参数含义

注册JIT编译函数给debugger使用,本参数仅能在PostgreSQL启动时设置。

是否可session级修改

修改后何时生效

Reload即可对新的connection生效

1.43.22. jit_dump_bitcode

参数名称

jit_dump_bitcode

数据类型

bool

默认值

off

取值范围

on和off

参数单位

参数含义

写出LLVM的bitcode以便利于JIT debugging,

是否可session级修改

是,仅限于superuser

修改后何时生效

Reload即可生效

1.43.23. jit_expressions

参数名称

jit_expressions

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

当 JIT 编译被启用时,本参数用于确定表达式是否被 JIT 编译

是否可session级修改

修改后何时生效

Reload即可生效

1.43.24. jit_profiling_support

参数名称

jit_profiling_support

数据类型

bool

默认值

off

取值范围

on和off

参数单位

参数含义

如果 LLVM 具有所需的功能,则发出允许perf分析 JIT 生成的函数所需的数据。这会将文件写入$HOME/.debug/jit/下; 用户负责在需要时执行清理。默认设置是off。该参数只能在服务器启动时设置。本参数仅能在PostgreSQL启动时设置。

是否可session级修改

修改后何时生效

Reload即可对新的connection生效

1.43.25. jit_tuple_deforming

参数名称

jit_tuple_deforming

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

当JIT编译被启用的状态下,本参数用于确定允许不允许tuple deforming进行jit 编译

是否可session级修改

修改后何时生效

Reload接口生效

1.44. Query Tuning / Planner Method Configuration

1.44.1. enable_bitmapscan

参数名称

enable_bitmapscan

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

启用或禁用query planner对位图扫描计划类型的使用

是否可session级修改

修改后何时生效

Reload即可生效

1.44.2. enable_gathermerge

参数名称

enable_gathermerge

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

启用或禁用query planner对gather merge计划类型的使用

是否可session级修改

修改后何时生效

Reload即可生效

1.44.3. enable_hashagg

参数名称

enable_hashagg

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

启用或禁用query planner对hashed aggregation计划类型的使用

是否可session级修改

修改后何时生效

Reload即可生效

1.44.4. enable_hashjoin

参数名称

enable_hashjoin

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

启用或禁用query planner对hash-join计划类型的使用

是否可session级修改

修改后何时生效

Reload即可生效

1.44.5. enable_incremental_sort

参数名称

enable_incremental_sort

数据类型

bool

默认值

on

取值范围

on和off

数单位

参数含义

启用或禁用query planner对incremental sort steps的使用

是否可session级修改

修改后何时生效

Reload即可生效

1.44.6. enable_indexscan

参数名称

enable_indexscan

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

启用或禁用query planner对index-scan的使用

是否可session级修改

修改后何时生效

Reload即可生效

1.44.7. enable_indexonlyscan

参数名称

enable_indexonlyscan

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

启用或禁用query planner对index-only-scan的使用

是否可session级修改

修改后何时生效

Reload即可生效

1.44.8. enable_material

参数名称

enable_material

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

启用或禁用query planner对materialization的使用,完全抑制物化是不可能的,但是关闭本参数可以防止query planner插入物化节点,除非在需要正确性的情况下。

是否可session级修改

修改后何时生效

Reload即可生效

1.44.9. enable_mergejoin

参数名称

enable_mergejoin

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

启用或禁用query planner对merge-join的使用

是否可session级修改

修改后何时生效

Reload即可生效

1.44.10. enable_nestloop

参数名称

enable_nestloop

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

启用或禁用query planner对nested-loop的使用。完全抑制nested-loop连接是不可能的,但是如果有其他方法可用,关闭本参数会阻止query planner使用nested-loop。

是否可session级修改

修改后何时生效

Reload即可生效

1.44.11. enable_parallel_append

参数名称

enable_parallel_append

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

启用或禁用query planner对parallel-aware append的使用

是否可session级修改

修改后何时生效

Reload即可生效

1.44.12. enable_parallel_hash

参数名称

enable_parallel_hash

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

启用或禁用query planner对parall hash join的使用,在hash-join被禁用的情况下,本参数值无效。

是否可session级修改

修改后何时生效

Reload即可生效

1.44.13. enable_partition_pruning

参数名称

enable_partition_pruning

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

启用或禁用query planner的partitioned table中消除partition。这也控制计划器生成查询计划的能力。允许查询执行器在查询执行期间删除(忽略)分区

是否可session级修改

修改后何时生效

Reload即可生效

1.44.14. enable_partitionwise_join

参数名称

enable_partitionwise_join

数据类型

bool

默认值

off

取值范围

on和off

参数单位

参数含义

启用或禁用query planner对partitionwise join的使用,这允许在partitioned table上的join在匹配的partition上执行join。Partitionwise 目前仅适用于连接条件包括所有分区键的情况,这些分区键必须是相同的数据类型并且具有一对一匹配的子分区集。由于分区连接规划在规划期间可以使用明显更多的 CPU 时间和内存,本参数默认值为off

是否可session级修改

修改后何时生效

Reload即可生效

1.44.15. enable_partitionwise_aggregate

参数名称

enable_partitionwise_aggregate

数据类型

bool

默认值

off

取值范围

on和off

参数单位

参数含义

启用或禁用query planner对partitionwise grouping or aggregation的使用,这允许在partitioned table上的partitionwise grouping or aggregation会在每个partition上单独执行。如果GROUP BY子句不包含分区键,则只能在每个分区的基础上执行部分聚合,并且必须稍后执行最终确定。由于partitionwise grouping or aggregation在规划期间可能会使用更多的 CPU 时间和内存,本参数值为off

是否可session级修改

修改后何时生效

Reload即可生效

1.44.16. enable_seqscan

参数名称

enable_seqscan

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

启用或禁用query planner对sequential scan的使用。完全抑制顺序扫描是不可能的,但是如果有其他方法可用,关闭本参数会阻止query planner使用sequential scan。

是否可session级修改

修改后何时生效

Reload即可生效

1.44.17. enable_sort

参数名称

enable_sort

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

启用或禁用query planner对explicit sort steps的使用。完全抑制显式排序是不可能的,但是如果有其他方法可用,关闭本参数会阻止query planner使用显式排序。

是否可session级修改

修改后何时生效

Reload即可生效

1.44.18. enable_tidscan

参数名称

enable_tidscan

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

启用或禁用query planner对TID scan的使用

是否可session级修改

修改后何时生效

Reload即可生效

1.45. Reporting and Logging / What to Log

1.45.1. application_name

参数名称

application_name

数据类型

string

默认值

psql

取值范围

参数单位

参数含义

本参数值的长度小于NAMEDATALEN值(NAMEDATALEN是源码中的符号常量,默认是64个字符)。本参数被连接到服务器上的应用程序设置,本参数值会显示在pg_stat_activity视图中,也会显示在csv log中。本参数值也可以被包括在配置参数log_line_prefix的参数值中。只有可打印的ASCII字符才可以用于本参数值。其他字符会被问号(?)取代。

是否可session级修改

修改后何时生效

Reload即可生效

1.45.2. debug_print_parse

参数名称

debug_print_parse

数据类型

bool

默认值

取值范围

参数单位

参数含义

在运行日志中记录query的parse tree。本消息在LOG消息级别的情况下被发出,因此,默认情况下,本消息会出现在运行日志中,但不会发给client。您可以通过调整client_min_messages配置参数、log_min_messages配置参数让消息发送给client。

是否可session级修改

修改后何时生效

Reload即可生效

1.45.3. debug_print_rewritten

参数名称

debug_print_rewritten

数据类型

bool

默认值

off

取值范围

off和on

参数单位

参数含义

在运行日志中记录query的query rewriter output,。本消息在LOG消息级别的情况下被发出,因此,默认情况下,本消息会出现在运行日志中,但不会发给client。您可以通过调整client_min_messages配置参数、log_min_messages配置参数让消息发送给client。

是否可session级修改

修改后何时生效

Reload即可生效

1.45.4. debug_print_plan

参数名称

debug_print_plan

数据类型

bool

默认值

off

取值范围

off和on

参数单位

参数含义

在运行日志中记录query的execution plan。本消息在LOG消息级别的情况下被发出,因此,默认情况下,本消息会出现在运行日志中,但不会发给client。您可以通过调整client_min_messages配置参数、log_min_messages配置参数让消息发送给client。

是否可session级修改

修改后何时生效

Reload即可生效

1.45.5. debug_pretty_print

参数名称

debug_pretty_print

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

本参数设置为on时,会将debug_print_parse, debug_print_rewritten, or debug_print_plan配置参数产生的消息进行缩进,这会导致比设置为off时的compact格式更具有可读性但输出会更长。

是否可session级修改

修改后何时生效

Reload即可生效

1.45.6. log_checkpoints

参数名称

log_checkpoints

数据类型

bool

默认值

off

取值范围

off和on

参数单位

参数含义

将checkpoints 和restartpoints记录到运行日志中,一些统计信息被包括到消息中,如写入buffer的数量以及写buffer的耗时等。本参数仅能在postgresql.conf设置或者在server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.45.7. log_connections

参数名称

log_connections

数据类型

bool

默认值

off

取值范围

off和on

参数单位

参数含义

当本参数值为on时,每一次尝试连接到PostgreSQL数据库以及客户端成功完成身份认证都会被记录到运行日志中。请注意:有些客户端程序(如psql)会连接两次以确定password是否需要,在该情况下,会有重复的"connection received"消息出现,该消息不一定表示有问题。

是否可session级修改

修改后何时生效

Reload即可对新的connection生效

1.45.8. log_disconnections

参数名称

log_disconnections

数据类型

bool

默认值

off

取值范围

off和on

参数单位

参数含义

当本参数值为on时, session终止的信息会被记录到运行日志中。日志输出类似log_connections配置参数的输出信息,以及session的持续时间。

是否可session级修改

修改后何时生效

Reload即可对新的connection生效

1.45.9. log_error_verbosity

参数名称

log_error_verbosity

数据类型

enum

默认值

default

取值范围

{terse,default,verbose}

参数单位

参数含义

设置日志消息的详细程度。控制在PG运行日志中为记录的每条消息写入的详细程度。Terse排除了DETAIL、HINT、QUERY、和CONTEXT 级别的信息。Verbose输出包括SQLSTATE错误代码以及源码文件名称、函数名称、生成错误的行号。仅有superuser能修改本参数值

是否可session级修改

是,仅限于superuser

修改后何时生效

Reload即可生效

1.45.10. log_hostname

参数名称

log_hostname

数据类型

bool

默认值

off

取值范围

off和on

参数单位

参数含义

默认情况下,在运行日志中显示连接主机的 IP 地址。打开此参数也会导致记录主机名。请注意,根据您的主机名解析设置,这可能会造成不可忽视的性能损失。此参数只能在postgresql.conf文件中或在server command line中设置。

是否可session级修改

修改后何时生效

Reload即可生效

1.45.11. log_line_prefix

参数名称

log_line_prefix

数据类型

string

默认值

%m [%p]

取值范围

参数单位

参数含义

控制运行日志中每行开头的输出内容。

是否可session级修改

修改后何时生效

Reload即可生效。

1.45.12. log_lock_waits

参数名称

log_lock_waits

数据类型

bool

默认值

off

取值范围

off和on

参数单位

参数含义

当一个session的等待时间长于配置参数deadlock_timeout参数值以获得锁时是否生成日志消息。这在锁定等待是否导致性能不佳时非常有用。只有superuser才能更改本设置。

是否可session级修改

是,仅限于superuser进行修改

修改后何时生效

Reload即可生效。

1.45.13. log_parameter_max_length

参数名称

log_parameter_max_length

数据类型

integer

默认值

-1

取值范围

-1到1073741823

参数单位

Byte

参数含义

如果本参数值大于零,则使用非错误语句日志消息记录的每个绑定参数值将被修剪为本参数值个字节。零禁用非错误语句日志的绑定参数的日志记录。-1(默认)允许完整记录绑定参数。如果此值未指定单位,则将其视为字节。只有超级用户才能更改此设置。
此设置仅影响由于log_statement、log_duration和相关设置而打印的日志消息。此设置的非零值会增加一些开销,特别是如果参数以二进制形式发送,则需要转换为文本。

是否可session级修改

是,仅限于superuser进行修改

修改后何时生效

Reload即可生效

1.45.14. log_parameter_max_length_on_error

参数名称

log_parameter_max_length_on_error

数据类型

integer

默认值

0

取值范围

-1到1073741823

参数单位

Byte

参数含义

如果大于零,错误消息中报告的每个绑定参数值都会被修剪到本参数值个字节。零(默认值)禁用在错误消息中包含绑定参数。-1允许完整打印绑定参数。如果此值未指定单位,则将其视为字节此设置的非零值会增加开销,因为PostgreSQL需要在每个语句开始时将参数值的文本表示存储在内存中,无论最终是否发生错误。以二进制形式发送绑定参数时的开销比以文本形式发送时要大,因为前者需要数据转换,而后者只需要复制字符串

是否可session级修改

修改后何时生效

Reload即可生效

1.45.15. log_statement

参数名称

log_statement

数据类型

enum

默认值

all

取值范围

{none,ddl,mod,all} none是off的意思, ddl的含义是记录所有数据定义语句,如create、alter、drop; mod的含义是记录DDL语句之外,还会记录数据修改语句,如insert、update、delete、truncate以及copy from语句。PREPARE、EXECUTE和EXPLAIN ANALYZE语句所包含的命令的类型适当时,也会记录这些语句。all的含义是记录所有语句。

参数单位

参数含义

控制在PG的运行日志中写入哪些类型的SQL语句。对于使用扩展查询协议的客户端来说,记录到运行日志是从一个执行消息被收到开始的。绑定参数值也会被记录。请注意,即使是本参数值设置为all,运行日志中也不会显示那些包含简单语法错误的SQL语句。因为仅仅在基本的解析完成并确定SQL语句的type之后,log message才会被发出。在扩展查询协议的情况下,本参数值同样不会记录在执行阶段之前(即:在parser分析或planner期间)失败的语句。设置log_min_error_statement为error(或者更低)以记录此类语句

是否可session级修改

是,仅限于superuser进行修改

修改后何时生效

Reload即可生效

1.45.16. log_replication_commands

参数名称

log_replication_commands

数据类型

bool

默认值

off

取值范围

off和on

参数单位

参数含义

是否将每个复制命令记录到PG运行日志中

是否可session级修改

是,仅限于superuser修改

修改后何时生效

Reload即可生效

1.45.17. log_temp_files

参数名称

log_temp_files

数据类型

integer

默认值

-1,代表禁用本log功能

取值范围

-1到2147483647

参数单位

KB

参数含义

控制是否记录本临时文件的文件名和大小。临时文件被创建用以排序、hash以及临时查询结果。当本参数值被启用时,当临时文件被删除时,一个日志条目会被发出。本参数值为0时会记录所有的临时文件信息。本参数值为正数时表示仅仅会记录那些临时文件大小大于等于本参数值的临时文件。本参数值不指定单位时,默认值以KB为单位。本参数仅仅superuser可以修改。

是否可session级修改

是,仅限于superuser进行修改。

修改后何时生效

Reload即可生效

1.45.18. log_timezone

参数名称

log_timezone

数据类型

String

默认值

内置默认值是GMT,但该内置默认值通常在postgresql.conf中被覆盖; initdb将在会设置本参数值以便与系统环境相对应。

取值范围

参数单位

参数含义

设置在log message中使用的time zone。与TimeZone配置参数不同,此值是PostgreSQL Cluster范围的,因此所有会话将一致地报告时间戳。此参数只能在postgresql.conf文件中或在server command line中设置

是否可session级修改

修改后何时生效

Reload即可生效

1.46. Client Connection Defaults / Statement Behavior

1.46.1. client_min_messages

参数名称

client_min_messages

数据类型

enum

默认值

notice

取值范围

{debug5,debug4,debug3,debug2,debug1,log,notice,warning,error}

参数单位

参数含义

控制将哪些消息级别发送到客户端。有效值为DEBUG5,DEBUG4,DEBUG3,DEBUG2,DEBUG1,LOG,NOTICE,WARNING和ERROR。每个级别包括其后的所有级别。级别越靠后,发送的消息就越少。请注意,本参数值log的级别与log_min_messages配置参数值log的级别是不同的。

是否可session级修改

修改后何时生效

Reload即可生效

1.46.2. search_path

参数名称

search_path

数据类型

string

默认值

"$user", public

取值范围

参数单位

参数含义

当一个object(table, data type, function等等)不带前面的schema name时,本参数用来指定哪个schema name会被搜索到。当在不同的schema name中有相同的object name时,在search_path中第一个匹配的object的那个schema会被使用。若是一个object没有被search_path中的任何schema匹配到,那么,这个object使用时需要带schema name(即:前面带上 "schema.").本参数值需要以逗号分隔,当本参数值包括不存在schema name 或者user没有对该schema name的usage权限时,此类参数值会被忽略。本参数值中出现的$user,其含义是current_user,若是存在与该user同名的schema name并且该user有对该schema name的usage权限(若不是这样,$user会被忽略)不论在本参数值中包括不包括pg_catalog,pg_catalog总会被搜索到,若是在本参数值中包括pg_catalog,那么会按照在本参数值中出现的顺序去搜,若是在本参数值中不包括pg_catalog,那么,PostgreSQL会在本参数值之前去搜索pg_catalog.类似的,当前的session临时表schema pg_temp_nnn 若是存在的话,会总被搜索到。可以在本参数值中使用pg_temp来明确指定要对pg_temp_nnn进行搜索。若是在本参数值中不明确列出,那么,PostgreSQL会首先搜索pg_temp_nnn(在pg_catalog之前)。临时schema name仅仅被用来搜索relation(表、视图、序列等等)和data type name,临时schema name不能用来搜索function name或者operator name当一个object被建立时其前面不指定任何schema name时,该object的schema name是在本参数值中搜索到的第一个有效的schema。当本参数值为空时,一个错误会被抛出。
本参数的默认值是"$user", public,该默认值支持对一个数据库的共享使用(即:没有user有私有的schemas,并且都对public共享使用)、每个user schema的私有使用以及混合使用。其他的影响可以通过alter语句修改本参数值来获得,这个修改可以是全局的也可以每个user的。可以通过函数current_schemas来检查当前使用的有效的schema name,这与search_path的参数值并不完全一致,因为函数current_schemas显示了在本参数值中出现的item是如何解析的。

是否可session级修改

修改后何时生效

Reload即可生效

1.46.3. row_security

参数名称

row_security

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

本参数控制是否抛出错误以代替应用行安全策略。on代表正常应用行安全策略,off代表查询失败除非应用了至少行安全策略。在限制了行可见性导致错误的结果的情况下,可以将本参数值改为off。在默认情况下,pg_dump会进行该修改(即:修改本参数值为off)。本参数对可以绕过行安全策略的roles是无效的,即:superuser和那些带有bypassrls属性的role。

是否可session级修改

修改后何时生效

Reload即可生效

1.46.4. default_table_access_method

参数名称

default_table_access_method

数据类型

string

默认值

heap

取值范围

参数单位

参数含义

本参数指定了create table或者create materialized views不带访问方法时table或者materialized views的访问方法,以及select …into语句使用时用到的访问方法。

是否可session级修改

修改后何时生效

Reload即可生效

1.46.5. default_tablespace

参数名称

default_tablespace

数据类型

string

默认值

空字符串,空字符串代表当前database的默认tablespace

取值范围

参数单位

参数含义

在create object(table和index)语句不明确指定tablespace情况下,本参数值指定了该object对应的tablespace。如果指定的本参数值与现有的任何tablespace不匹配,那么PostgreSQL会自动使用当前database的默认tablespace。如果一个非默认表空间被指定,那么user必须带有对该非默认表空间的create的权限,否则创建会失败本参数不适用于临时表。临时表对应的配置参数是temp_tablespaces。本参数也不适用于create database语句。默认情况下,一个新的database从template数据库中继承了tablespace。若是本参数值是非空字符串,然后partitioned table被创建,那么,该partitioned table的表空间被设置为该非空字符串,该非空字符串也是将来partition被建立的默认表空间,即使本配置参数值之后被更改。

是否可session级修改

修改后何时生效

Reload即可生效。

1.46.6. temp_tablespaces

参数名称

temp_tablespaces

数据类型

string

默认值

空字符串,空字符串代表所有的temporary objects都会被创建在当前数据库的默认表空间中。

取值范围

参数单位

参数含义

在create temporary object(temp tables 和temp tables 上的indexes)语句不明确指定tablespace情况下,本参数值指定了该object对应的temporary tablespace。诸如排序生成的临时文件也被建立到这个temp_tablespaces指定的临时表空间中。本参数值是一系列的tablespace name的清单,当有多个tablespace name的情况下,每次创建临时对象时,PostgreSQL 都会从列表中随机选择一个tablespace name。除了在事务中,连续创建的临时对象被放置在列表中的连续表空间中。如果列表中选定的是空字符串,PostgreSQL会自动使用当前数据库的默认表空间。当temp_tablespaces以交互方式设置时,指定不存在的表空间会报错,指定用户没有CREATE权限的表空间也会报错。但是,当使用先前设置的值时,将忽略不存在的表空间,以及用户缺乏CREATE权限的表空间。此规则适用于在postgresql.conf设置本参数值的情况下

是否可session级修改

修改后何时生效

Reload即可生效

1.46.7. check_function_bodies

参数名称

check_function_bodies

数据类型

bool

默认值

on

取值范围

on和off

参数单位

参数含义

当设置为off时,它会在CREATE FUNCTION期间禁用函数体字符串的验证。禁用验证可避免验证过程的副作用,并避免由于前向引用等问题导致的误报。在代表其他用户加载函数之前,将此参数设置为off;pg_dump会自动执行此操作

是否可session级修改

修改后何时生效

Reload即可生效

1.46.8. default_transaction_isolation

参数名称

default_transaction_isolation

数据类型

enum

默认值

read committed

取值范围

{serializable,"repeatable read","read committed","read uncommitted"}

参数单位

参数含义

本参数用来控制新事务的隔离级别

是否可session级修改

修改后何时生效

Reload即可生效

1.46.9. default_transaction_read_only

参数名称

default_transaction_read_only

数据类型

bool

默认值

off,off的意思是read/write

取值范围

off和on

参数单位

参数含义

本参数用来控制每个新事务的默认只读状态。一个只读事务不能改变(alter)一个非临时表.

是否可session级修改

修改后何时生效

Reload即可生效

1.46.10. default_transaction_deferrable

参数名称

default_transaction_deferrable

数据类型

bool

默认值

off

取值范围

off和on

参数单位

参数含义

当运行在serializable隔离级别中时,一个deferrable的只读事务在它被允许继续处理之前可能会被延迟。然而,一旦它开始执行,它就不会产生任何确保可串行化所需的开销;所以序列化代码没有理由因为并发更新而强制中止该只读事务,这确保了对长时间运行的只读事务是很合适的。本参数控制每个新事务的默认的deferrable状态。当前,本参数对read-write事务是无效的,对隔离级别低于serializable的事务也是无效的

是否可session级修改

修改后何时生效

Reload即可生效

1.46.11. session_replication_role

参数名称

session_replication_role

数据类型

enum

默认值

origin

取值范围

{origin,replica,local}

参数单位

参数含义

控制针对当前session的与复制相关的triggers和rules的触发(firing),设置本参数需要superuser权限,并且会导致之前cache起来的查询计划被丢弃掉。本参数的用意是逻辑复制系统在应用复制的更改时将本参数值设置为replica,这样做的结果是,触发器和规则(没有从默认配置更改)不会在复制副本上触发。详细信息,请参阅ALTER TABLE子句ENABLE TRIGGER和ENABLE RULE
PostgreSQL在内部将参数值origin和local视为相同的值,第三方复制软件可能把这两个参数用于他们的目的,比如,使用local来指示一个session的变化不会被复制的session。因为外键是通过trigger实现的,因此,设置本参数为replica也会disable掉所有的外键约束检查。

是否可session级修改

是,仅限于superuser可进行修改。

修改后何时生效

Reload即可生效

1.46.12. statement_timeout

参数名称

statement_timeout

数据类型

integer

默认值

0,零代表禁用超时机制

取值范围

0到2147483647

参数单位

毫秒

参数含义

终止掉运行时间超过本参数值时间长度的SQL语句。如果log_min_error_statement配置参数被设置为error或者更低级别,超时的SQL语句也会被记录下来。超时时间是如下计算的:从SQL语句到PostgreSQL数据库服务器端开始算,直到该语句被服务器处理完成。如果单个简单查询消息(single simple-Query message)中出现多个SQL语句,则将分别对每条语句应用超时.( PostgreSQL13之前的版本通常将超时处理为应用于整个查询字符串),在扩展查询协议中,当任何与查询相关的消息(Parse、Bind、Execute、descripe)到达PostgreSQL数据库时,超时就开始计时,并通过完成Execute或Sync消息而取消。在postgresql.conf中设置本参数值是不推荐的,因为这会影响所有session

是否可session级修改

修改后何时生效

Reload即可生效

1.46.13. lock_timeout

参数名称

lock_timeout

数据类型

integer

默认值

0,零代表禁用超时机制

取值范围

0到2147483647

参数单位

毫秒

参数含义

终止掉在尝试获取表、索引、行或其他数据库对象上的锁的等待时间超过本参数值的任何语句。时间限制分别适用于每次锁获取尝试,该限制既适用于显式锁定请求(如LOCK TABLE,或SELECT FOR UPDATE without NOWAIT),也适用于隐式获取的锁。如果指定的值没有单位,则以毫秒为单位。值为零(默认值)将禁用超时。与statement_timeout配置参数不同,本超时只能在锁等待时发生。请注意,如果statement_timeout非零,设置lock_timeout为相同或更大的值是毫无意义的,因为语句超时总是首先触发。如果log_min_error_statement设置为ERROR或更低,则将记录超时的语句。在postgresql.conf中设置本参数值是不推荐的,因为这会影响所有session

是否可session级修改

修改后何时生效

Reload即可生效

1.46.14. idle_in_transaction_session_timeout

参数名称

idle_in_transaction_session_timeout

数据类型

integer

默认值

0,零代表禁用超时机制

取值范围

0到2147483647

参数单位

毫秒

参数含义

终止掉那些处于open transaction状态的并且idle时间长度超过本参数值的任何会话。这允许释放该会话持有的任何锁,并重用连接槽;它还允许对仅对此事务可见的元组进行vacuum。

是否可session级修改

修改后何时生效

Reload即可生效

1.46.15. vacuum_freeze_table_age

参数名称

vacuum_freeze_table_age

数据类型

integer

默认值

150000000

取值范围

0到2000000000

参数单位

参数含义

如果表的pg_class.relfrozenxid字段值已经达到本参数值,那么vacuum会执行一次侵略性的扫描(aggressive scan)。侵略性的扫描(aggressive scan)不同于常规vacuum(regular VACUUM), 侵略性的扫描(aggressive scan)会查看每个page以确定page中是否包括未冻结的xids或者mxids,而不是仅仅查看page中是否包括dead tuples。尽管用户可以将此值设置为 0 到 20 亿之间的任何值,但VACUUM会默默地将有效值限制为autovacuum_freeze_max_age 的95% ,以便有机会定期在为表启动反环绕自动清理(anti-wraparound autovacuum)之前手工运行VACUUM。

是否可session级修改

修改后何时生效

Reload即可生效

1.46.16. vacuum_freeze_min_age

参数名称

vacuum_freeze_min_age

数据类型

integer

默认值

50000000

取值范围

0到1000000000

参数单位

参数含义

本参数用于指定VACUUM在扫描表时用于决定是否冻结行版本的截止年龄(cutoff age,以事物计算), 尽管用户可以将此值设置为 0 到 10 亿之间的任何值,但VACUUM会默默地将有效值限制为autovacuum_freeze_max_age参数值的一半,这样强制 autovacuum之间的时间不会过短。

是否可session级修改

修改后何时生效

1.46.17. vacuum_multixact_freeze_table_age

参数名称

vacuum_multixact_freeze_table_age

数据类型

integer

默认值

150000000

取值范围

0到2000000000

参数单位

参数含义

如果表的pg_class. relminmxid字段值已经达到本参数值,那么vacuum会执行一次侵略性的扫描(aggressive scan)。侵略性的扫描(aggressive scan)不同于常规vacuum(regular VACUUM), 侵略性的扫描(aggressive scan)会查看每个page以确定page中是否包括未冻结的xids或者mxids,而不是仅仅查看page中是否包括dead tuples。尽管用户可以将此值设置为 0 到 20 亿之间的任何值,但VACUUM会默默地将有效值限制为autovacuum_multixact_freeze_max_age的95% ,以便有机会定期在为表启动反环绕自动清理(anti-wraparound autovacuum)之前手工运行VACUUM。

是否可session级修改

修改后何时生效

Reload即可生效

1.46.18. vacuum_multixact_freeze_min_age

参数名称

vacuum_multixact_freeze_min_age

数据类型

integer

默认值

5000000

取值范围

0到1000000000

参数单位

参数含义

本参数用于指定VACUUM在扫描表时用于决定是否冻结行版本的multixacts截止年龄(cutoff age), 尽管用户可以将此值设置为 0 到 10 亿之间的任何值,但VACUUM会默默地将有效值限制为autovacuum_multixact_freeze_max_age参数值的一半,这样强制 autovacuum之间的时间不会过短。

是否可session级修改

修改后何时生效

Reload即可生效

1.46.19. bytea_output

参数名称

bytea_output

数据类型

enum

默认值

hex

取值范围

{escape,hex}

参数单位

参数含义

本配置参数定义了对数据类型bytea的输出格式。 bytea数据类型在输入时对两种格式(escape和hex)均接受。escape代表传统的PostgreSQL格式。

是否可session级修改

修改后何时生效

Reload即可生效

1.46.20. xmlbinary

参数名称

xmlbinary

数据类型

enum

默认值

base64

取值范围

{base64,hex}

参数单位

参数含义

设置二进制值在 XML 中的编码方式。例如,这适用于通过函数xmlelement或xmlforest将bytea值转换为XML的情况。可能的值为base64和hex,它们都在 XML 模式标准中定义。

是否可session级修改

修改后何时生效

Reload即可生效

1.46.21. xmloption

参数名称

xmloption

数据类型

enum

默认值

content

取值范围

{content,document}

参数单位

参数含义

本参数用于设置在XML和字符串值之间转换时DOCUMENT或CONTENT是隐式的。在PostgreSQL中,也可以使用下面的SQL标准来设置:SET XML OPTION { DOCUMENT | CONTENT };

是否可session级修改

修改后何时生效

Reload即可生效

1.46.22. gin_pending_list_limit

参数名称

gin_pending_list_limit

数据类型

integer

默认值

4096

取值范围

64到2147483647

参数单位

KB

参数含义

设置GIN索引的挂起列表(pending list)的最大大小,该列表在启用fastupdate时使用。如果列表的大小超过此最大值,则通过将列表中的条目批量移动到索引的主数据结构来清除列表。如果指定此值时没有单位,则将其作为千字节。默认值为4MB。通过更改索引存储参数,可以为单个GIN索引重写此设置.

是否可session级修改

修改后何时生效

Reload即可生效