下面的参数目的是用在开发测试上, 并且永远不能用于生产数据库。 但是,它们中的一些能够用于帮助恢复严重损坏的数据库。 同样,它们被从示例postgresql.conf文件中排除。 请注意许多这些参数要求特殊的源代码编译标志才能工作。
allow_in_place_tablespaces (boolean) #允许将表空间创建为pg_tblspc内的目录,当CREATE TABLESPACE命令提供空位置字符串时。 这旨在允许测试主库和备库在同一台机器上运行的复制场景。这样的目录可能会混淆备份工具,因为这些工具期望在该位置只找到符号链接。 只有超级用户和具有适当SET权限的用户才能更改此设置。
allow_system_table_mods (boolean) #允许修改系统表的结构以及对系统表进行某些其他风险操作。即使对于超级用户,这也通常是不允许的。 不明智地使用此设置可能导致无法检索的数据丢失或严重损坏数据库系统。 只有超级用户和具有适当SET权限的用户才能更改此设置。
backtrace_functions (string) #这个参数包含一个以逗号分隔的C函数名称列表。 如果出现错误,并且发生错误的内部C函数的名称与列表中的值相匹配,那么将向服务器日志中写入一个回溯跟踪信息和错误消息。 这可以用来调试源代码的特定区域。
回溯支持并非在所有平台上都可以使用,并且回溯的质量取决于编译选项。
只有超级用户和具有适当SET权限的用户才能更改此设置。
debug_copy_parse_plan_trees (boolean) #启用该选项会强制所有解析树和计划树都经过copyObject()处理, 以便更容易发现copyObject()中的错误和遗漏。默认值为关闭。
只有在编译时定义了DEBUG_NODE_TESTS_ENABLED时,这个参数才可用; 使用configure选项--enable-cassert时会自动定义该宏。
debug_discard_caches (integer) #当设置为1时,每个系统目录缓存条目在第一个可能的机会时失效,不管任何使之无效的事情是否真的发生。 作为结果,系统目录的缓存被有效地禁用,因此服务器将运行得非常缓慢。 较高的值递归地运行缓存失效,这样会更慢,而且只用于测试缓存逻辑自身。 默认值0选择正常的目录缓存行为。
当试图触发涉及并发目录更改的难以复现的错误时,此参数非常有用,但除此之外它不太被需要。 详情请参见源码文件inval.c和pg_config_manual.h。
只有在编译时定义了DISCARD_CACHES_ENABLED时,这个参数才受支持; 使用configure选项--enable-cassert时会自动定义该宏。 在生产构建中,它的值始终为0,尝试将其设置为其他值会引发错误。
debug_io_direct (string) #要求内核使用O_DIRECT(大多数类 Unix 系统)、F_NOCACHE(macOS) 或FILE_FLAG_NO_BUFFERING(Windows),尽量减小关系数据和 WAL 文件缓存的影响。
可以将其设置为空字符串(默认值)以禁用直接 I/O,也可以设置为应使用直接 I/O 的操作列表, 各项之间用逗号分隔。有效选项包括data(主数据文件)、 wal(WAL 文件)和wal_init(WAL 文件初始分配时)。 这个参数只能在服务器启动时设置。
某些操作系统和文件系统不支持直接 I/O,因此非默认设置可能会在启动时被拒绝或导致错误。
目前该特性会降低性能,仅用于开发人员测试。
debug_parallel_query (enum) #允许出于测试目的使用并行查询,即使预计不会带来性能收益也是如此。 debug_parallel_query的允许值为off(仅在预期会提高性能时使用并行模式), on(对所有被认为安全的查询强制使用并行查询), 以及regress(类似于on,但有下文所述的额外行为变化)。
更具体地说,将该值设置为on会在任何看起来安全的查询计划顶部添加一个 Gather节点,以便查询在并行工作进程中运行。即使并行工作进程不可用或 无法使用,启动子事务等在并行查询上下文中被禁止的操作也将被禁止,除非规划器认为这样会导致查询失败。 如果设置此选项时出现故障或意外结果,则可能需要将查询使用的一些函数标记为 PARALLEL UNSAFE(或可能是PARALLEL RESTRICTED)。
将该值设置为regress会产生与设置为on相同的所有效果, 并额外启用一些行为,以便自动回归测试。通常,来自并行工作进程的消息会包含一行上下文说明, 但regress会抑制这一行,因此输出与非并行执行时相同。 此外,由该设置添加到计划中的Gather节点会在EXPLAIN输出中被隐藏, 以便输出与此设置为off时得到的结果一致。
debug_raw_expression_coverage_test (boolean) #启用该选项会强制所有 DML 语句的原始解析树都经过raw_expression_tree_walker()扫描, 以便更容易发现该函数中的错误和遗漏。默认值为关闭。
只有在编译时定义了DEBUG_NODE_TESTS_ENABLED时,这个参数才可用; 使用configure选项--enable-cassert时会自动定义该宏。
debug_write_read_parse_plan_trees (boolean) #启用该选项会强制所有解析树和计划树都经过outfuncs.c/readfuncs.c处理, 以便更容易发现这些模块中的错误和遗漏。默认值为关闭。
只有在编译时定义了DEBUG_NODE_TESTS_ENABLED时,这个参数才可用; 使用configure选项--enable-cassert时会自动定义该宏。
ignore_system_indexes (boolean) #读取系统表时忽略系统索引(但是修改系统表时依然同时更新索引)。这在从被破坏的系统索引中恢复数据的时有用。这个参数在会话开始之后不能被更改。
post_auth_delay (integer) #执行认证过程后启动新服务器进程时延迟的时间量。这是为了给开发者们一个机会在一个服务器进程上附加一个调试器。 如果指定值时没有单位,则以秒为单位。0值(默认值)禁用延迟。这个参数在会话开始之后不能被更改。
pre_auth_delay (integer) #在新服务器进程分叉后,在进行认证过程之前,延迟的时间量。这是为了给开发者们一个机会在一个服务器进程上附加一个调试器来跟踪认证过程中的不当行为。 如果指定值时没有单位,则以秒为单位。0值(默认值)禁用延迟。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。
trace_notify (boolean) #为LISTEN和NOTIFY命令生成大量调试输出。client_min_messages和log_min_messages必须是DEBUG1或者更低才能把这种输出分别发送到客户端或者服务器日志。
trace_sort (boolean) #如果打开,发出在排序操作中的资源使用的相关信息。只有在编译PostgreSQL时定义了TRACE_SORT宏, 这个参数才可用(不过,当前在默认情况下就定义了TRACE_SORT)。
trace_locks (boolean) #如果开启,发出锁使用情况的信息。被转储信息中包括锁操作的类型、锁的类型和 被锁或被解锁对象的唯一标识符。同样包括的还有已经授予这个对象的锁类型的位掩码和 等待这个对象的锁类型的位掩码。对每一种锁类型,已授权锁和等待锁的计数也会被一起转储。一个日志文件输出的示例如下:
LOG: LockAcquire: new: lock(0xb7acd844) id(24688,24696,0,0,0,1)
grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0
wait(0) type(AccessShareLock)
LOG: GrantLock: lock(0xb7acd844) id(24688,24696,0,0,0,1)
grantMask(2) req(1,0,0,0,0,0,0)=1 grant(1,0,0,0,0,0,0)=1
wait(0) type(AccessShareLock)
LOG: UnGrantLock: updated: lock(0xb7acd844) id(24688,24696,0,0,0,1)
grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0
wait(0) type(AccessShareLock)
LOG: CleanUpLock: deleting: lock(0xb7acd844) id(24688,24696,0,0,0,1)
grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0
wait(0) type(INVALID)
被转储结构的详细信息可以在src/include/storage/lock.h中找到。
只有在编译PostgreSQL时定义了LOCK_DEBUG宏, 这个参数才可用。
trace_lwlocks (boolean) #如果开启,发出轻量级锁的使用信息。轻量级锁主要是为了提供对共享内存数据结构的互斥访问。
只有在编译PostgreSQL时定义了LOCK_DEBUG宏, 这个参数才可用。
trace_userlocks (boolean) #如果开启,发出关于用户锁使用的信息。与trace_locks的输出一样,但只用于咨询锁。
只有在编译PostgreSQL时定义了LOCK_DEBUG宏, 这个参数才可用。
trace_lock_oidmin (integer) #如果设置,不会跟踪小于这个 OID 的锁(用于避免在系统表上的输出)。
只有在编译PostgreSQL时定义了LOCK_DEBUG宏, 这个参数才可用。
trace_lock_table (integer) #无条件地跟踪此表(OID)上的锁。
只有在编译PostgreSQL时定义了LOCK_DEBUG宏, 这个参数才可用。
debug_deadlocks (boolean) #如果设置,当死锁超时发生时,转储所有当前锁的信息。
只有在编译PostgreSQL时定义了LOCK_DEBUG宏, 这个参数才可用。
log_btree_build_stats (boolean) #如果设置,会记录 B-树操作上的系统资源使用情况统计(内存和 CPU)。
只有在编译PostgreSQL时定义了BTREE_BUILD_STATS宏, 这个参数才可用。
wal_consistency_checking (string) #这个参数被设计用来检查WAL重做例程中的缺陷。当这个参数被启用时,被修改的任何缓冲区的全页映像及其WAL记录都被加入到记录中。如果该记录后来被重放,系统将首先应用每个记录然后测试该记录修改的缓冲区是否符合存储的映像。在某些情况下(例如提示位),小的变动是可以接受的,并且会被忽略。任何预期之外的差别都将导致致命错误,最后中止恢复。
默认值为空字符串,表示禁用该功能。可以设置为all以检查所有记录, 或者设置为逗号分隔的资源管理器列表,以仅检查来自这些资源管理器的记录。目前支持的资源管理器有 heap、heap2、btree、hash、 gin、gist、sequence、spgist、 brin和generic。扩展可以定义额外的资源管理器。只有超级用户和具有 适当SET权限的用户才能更改此设置。
wal_debug (boolean) #如果被打开,WAL 相关的调试输出将被发出。只有在编译PostgreSQL时定义了WAL_DEBUG宏的情况下,这个参数才可用。
ignore_checksum_failure (boolean) #只有当-k被启用时才有效。
在读取过程中检测到校验和失败通常会导致PostgreSQL报告错误,中止当前事务。 将ignore_checksum_failure设置为on会导致系统忽略失败(但仍然报告警告),并继续处理。 这种行为可能导致崩溃,传播或隐藏损坏,或其他严重问题。然而,它可能允许您跳过错误, 并检索可能仍然存在于表中的未损坏的元组,如果块头仍然正常。如果头部损坏,即使启用此选项也会报告错误。 默认设置为off。 只有超级用户和具有适当SET权限的用户才能更改此设置。
zero_damaged_pages (boolean) #检测到损坏的页面头通常会导致PostgreSQL报告错误,中止当前事务。 将zero_damaged_pages设置为on会导致系统报告警告,将内存中的损坏页面清零,并继续处理。 这种行为会破坏数据,即损坏页面上的所有行。但是,它确实允许您跳过错误,并从表中可能存在的未损坏页面中检索行。 如果由于硬件或软件错误而发生损坏,这对于恢复数据很有用。通常在放弃从表的损坏页面恢复数据的希望之前,不应将其设置为on。 清零的页面不会强制写入磁盘,因此建议在再次关闭此参数之前重新创建表或索引。默认设置为off。 只有超级用户和具有适当SET权限的用户才能更改此设置。
ignore_invalid_pages (boolean) #如果设置为 off(默认值),则在恢复期间检测到引用无效页面的 WAL 记录会导致 PostgreSQL 引发 PANIC 级别错误,中止恢复。 将ignore_invalid_pages设置为on会导致系统忽略 WAL 记录中的无效页面引用(但仍报告警告),并继续恢复。 此行为可能会导致崩溃、数据丢失、传播或隐藏腐败,或其他严重问题。 但是,它可能允许你通过 PANIC 级错误,完成恢复,并启动服务器。 参数只能在服务器启动时设置。它仅在恢复期间或待机模式下生效。
jit_debugging_support (boolean) #如果LLVM有所需要的功能,用GDB注册所生成的函数。这会让调试更加容易。默认设置是off。这个参数只能在服务器启动时设置。
jit_dump_bitcode (boolean) #将生成的LLVM IR写入文件系统,位于data_directory内。 这仅对于在JIT实现内部工作时有用。默认设置为off。 只有超级用户和具有适当SET权限的用户才能更改此设置。
jit_expressions (boolean) #当JIT编译被激活时(见Section 30.2),确定表达式是否用JIT编译。默认值是on。
jit_profiling_support (boolean) #如果LLVM有所需的功能,发出需要的数据以允许perf对JIT生成的函数画像。 这会写出文件到~/.debug/jit/中,如果需要,由用户负责对其执行清除。 默认设置是off。 这个参数只能在服务器启动时设置。
jit_tuple_deforming (boolean) #当JIT编译被激活时(见Section 30.2),确定元组拆解是否被JIT编译。默认值是on。
remove_temp_files_after_crash (boolean) #当设置为on时,这是默认值,PostgreSQL将在后端崩溃后自动删除临时文件。 如果禁用,文件将被保留,并且也许可用于调试,例如。 重复的崩溃可能会导致无用文件的积累。 该参数只能在postgresql.conf文件中或服务器命令行中设置。
send_abort_for_crash (boolean) #默认情况下,后端崩溃后,主进程会向其余子进程发送SIGQUIT信号使其停止, 这样它们可以较为平稳地退出。当该选项设置为on时,则改为发送SIGABRT。 这通常会让每个这类子进程生成一个 core dump 文件。这有助于在崩溃后调查其他进程的状态。 但在反复崩溃时,它也可能消耗大量磁盘空间,因此不要在未严密监控的系统上启用它。 请注意,系统并不支持自动清理这些 core 文件。这个参数只能在postgresql.conf文件中或服务器命令行中设置。
send_abort_for_kill (boolean) #默认情况下,在尝试用SIGQUIT停止子进程之后,主进程会等待五秒, 然后发送SIGKILL强制立即终止。当该选项设置为on时, 则会发送SIGABRT而不是SIGKILL。 这通常会让每个这类子进程生成一个 core dump 文件。这有助于调查那些“卡住”的子进程状态。 但在反复崩溃时,它也可能消耗大量磁盘空间,因此不要在未严密监控的系统上启用它。 请注意,系统并不支持自动清理这些 core 文件。这个参数只能在postgresql.conf文件中或服务器命令行中设置。
debug_logical_replication_streaming (enum) #允许值为buffered和immediate。默认值为buffered。 这个参数旨在用于测试逻辑解码以及大型事务的复制。 debug_logical_replication_streaming对发布端和订阅端的影响不同。
在发布端,debug_logical_replication_streaming允许在逻辑解码中立即流式传输或序列化更改。 当设置为immediate时,如果 streaming选项在 CREATE SUBSCRIPTION中已启用, 则每条更改都会被流式传输;否则会序列化每条更改。设置为buffered时, 会在达到logical_decoding_work_mem后再流式传输或序列化更改。
在订阅端,如果streaming选项被设置为parallel, 则debug_logical_replication_streaming可用于控制主应用工作进程是将更改发送到共享内存队列, 还是将所有更改序列化到文件。设置为buffered时,主进程通过共享内存队列将更改发送给并行应用工作进程。 设置为immediate时,主进程会将所有更改序列化到文件,并通知并行应用工作进程在事务结束时读取并应用这些更改。
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。