## 20.17. Developer Options The following parameters are intended for developer testing, and should never be used on a production database. However, some of them can be used to assist with the recovery of severely damaged databases. As such, they have been excluded from the sample`postgresql.conf`file. Note that many of these parameters require special source compilation flags to work at all. `allow_system_table_mods`(`boolean`)[](<>) Allows modification of the structure of system tables as well as certain other risky actions on system tables. This is otherwise not allowed even for superusers. Ill-advised use of this setting can cause irretrievable data loss or seriously corrupt the database system. Only superusers can change this setting. `backtrace_functions`(`string`)[](<>) This parameter contains a comma-separated list of C function names. If an error is raised and the name of the internal C function where the error happens matches a value in the list, then a backtrace is written to the server log together with the error message. This can be used to debug specific areas of the source code. Backtrace support is not available on all platforms, and the quality of the backtraces depends on compilation options. This parameter can only be set by superusers. `debug_discard_caches`(`integer`)[](<>) When set to`1`, each system catalog cache entry is invalidated at the first possible opportunity, whether or not anything that would render it invalid really occurred. Caching of system catalogs is effectively disabled as a result, so the server will run extremely slowly. Higher values run the cache invalidation recursively, which is even slower and only useful for testing the caching logic itself. The default value of`0`selects normal catalog caching behavior. This parameter can be very helpful when trying to trigger hard-to-reproduce bugs involving concurrent catalog changes, but it is otherwise rarely needed. See the source code files`inval.c`and`pg_config_manual.h`详情。 支持此参数时`DISCARD_CACHES_ENABLED`在编译时定义(使用配置选项时自动发生`--enable-cassert`)。在生产构建中,它的价值将永远是`0`并尝试将其设置为另一个值会引发错误。 `force_parallel_mode`(`枚举`)[](<>) 即使在预期没有性能优势的情况下,也允许使用并行查询进行测试。的允许值`force_parallel_mode`是`离开`(仅在预期会提高性能时才使用并行模式),`在`(对所有被认为是安全的查询强制并行查询),以及`回归`(喜欢`在`,但具有如下所述的其他行为更改)。 更具体地说,将此值设置为`在`将添加一个`收集`节点到看起来安全的任何查询计划的顶部,以便查询在并行工作程序内部运行。即使并行工作者不可用或无法使用,诸如启动子事务之类在并行查询上下文中被禁止的操作也将被禁止,除非规划器认为这会导致查询失败。如果设置此选项时出现失败或意外结果,可能需要标记查询使用的某些功能`并行不安全`(或者,可能,`并行受限`)。 将此值设置为`回归`具有与将其设置为相同的所有效果`在`加上一些旨在促进自动化回归测试的附加效果。通常,来自并行工作者的消息包含一个上下文行,指示该内容,但设置为`回归`抑制此行,以便输出与非并行执行中的相同。此外,该`收集`通过此设置添加到计划的节点隐藏在`解释`输出,以便输出与打开此设置时获得的内容相匹配`离开`. `忽略系统索引`(`布尔值`)[](<>) 读取系统表时忽略系统索引(但修改表时仍会更新索引)。这在从损坏的系统索引中恢复时很有用。此参数在会话开始后无法更改。 `post_auth_delay`(`整数`)[](<>) 新服务器进程在执行身份验证过程后启动的延迟时间。这是为了让开发人员有机会使用调试器附加到服务器进程。如果指定此值没有单位,则以秒为单位。零值(默认值)禁用延迟。此参数在会话开始后无法更改。 `pre_auth_delay`(`整数`)[](<>) 在新的服务器进程被派生之后,在它执行身份验证过程之前延迟的时间量。这是为了让开发人员有机会使用调试器附加到服务器进程,以追踪身份验证中的不当行为。如果指定此值没有单位,则以秒为单位。零值(默认值)禁用延迟。该参数只能在`postgresql.conf`文件或在服务器命令行上。 `跟踪通知`(`布尔值`)[](<>) 为`听`和`通知`命令。[客户\_分钟\_消息](runtime-config-client.html#GUC-CLIENT-MIN-MESSAGES)或者[日志\_分钟\_消息](runtime-config-logging.html#GUC-LOG-MIN-MESSAGES)一定是`调试1`或更低以将此输出分别发送到客户端或服务器日志。 `trace_recovery_messages`(`枚举`)[](<>) 启用与恢复相关的调试输出的记录,否则这些输出不会被记录。此参数允许用户覆盖的正常设置[日志\_分钟\_消息](runtime-config-logging.html#GUC-LOG-MIN-MESSAGES),但仅适用于特定消息。这旨在用于调试热备。有效值为`调试5`,`调试4`,`调试3`,`调试2`,`调试1`, 和`日志`.默认,`日志`, 根本不影响日志记录决策。其他值会导致记录该优先级或更高优先级的与恢复相关的调试消息,就好像它们有`日志`优先;对于常见的设置`log_min_messages`这导致无条件地将它们发送到服务器日志。该参数只能在`postgresql.conf`文件或在服务器命令行上。 `跟踪排序`(`布尔值`)[](<>) 如果打开,则在排序操作期间发出有关资源使用情况的信息。此参数仅在以下情况下可用`TRACE_SORT`宏是在编译 PostgreSQL 时定义的。(然而,`TRACE_SORT`当前默认定义。) `跟踪锁`(`布尔值`)[](<>) 如果打开,则发出有关锁使用情况的信息。转储的信息包括锁定操作的类型、锁定的类型以及被锁定或解锁对象的唯一标识符。还包括已在此对象上授予的锁定类型以及在此对象上等待的锁定类型的位掩码。对于每种锁类型,授权锁和等待锁的数量以及总数也会被转储。此处显示了日志文件输出的示例: ``` 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`. 此参数仅在以下情况下可用`LOCK_DEBUG`宏是在编译 PostgreSQL 时定义的。 `trace_lwlocks`(`布尔值`)[](<>) 如果打开,则发出有关轻量级锁使用情况的信息。轻量级锁主要用于提供对共享内存数据结构访问的互斥。 此参数仅在以下情况下可用`LOCK_DEBUG`宏是在编译 PostgreSQL 时定义的。 `跟踪用户锁`(`布尔值`)[](<>) 如果打开,则发出有关用户锁使用情况的信息。输出与 for 相同`跟踪锁`, 仅适用于咨询锁。 此参数仅在以下情况下可用`LOCK_DEBUG`宏是在编译 PostgreSQL 时定义的。 `trace_lock_oidmin`(`整数`)[](<>) 如果设置,则不要跟踪低于此 OID 的表的锁(用于避免在系统表上输出)。 此参数仅在以下情况下可用`LOCK_DEBUG`宏是在编译 PostgreSQL 时定义的。 `trace_lock_table`(`整数`)[](<>) 无条件地跟踪此表 (OID) 上的锁。 此参数仅在以下情况下可用`LOCK_DEBUG`宏是在编译 PostgreSQL 时定义的。 `调试死锁`(`布尔值`)[](<>) 如果设置,则在发生死锁超时时转储有关所有当前锁的信息。 此参数仅在以下情况下可用`LOCK_DEBUG`宏是在编译 PostgreSQL 时定义的。 `log_btree_build_stats`(`布尔值`)[](<>) 如果设置,则记录各种 B 树操作的系统资源使用统计信息(内存和 CPU)。 此参数仅在以下情况下可用`BTREE_BUILD_STATS`宏是在编译 PostgreSQL 时定义的。 `wal_consistency_checking`(`细绳`)[](<>) 此参数旨在用于检查 WAL 重做例程中的错误。启用后,与 WAL 记录一起修改的任何缓冲区的整页图像都将添加到记录中。如果该记录随后被重放,系统将首先应用每条记录,然后测试该记录修改的缓冲区是否与存储的图像匹配。在某些情况下(例如提示位),微小的变化是可以接受的,并且会被忽略。任何意外的差异都会导致致命错误,从而终止恢复。 此设置的默认值为空字符串,即禁用该功能。可以设置为`全部`检查所有记录,或查看以逗号分隔的资源管理器列表,以仅检查源自这些资源管理器的记录。目前,支持的资源管理器是`堆`,`堆2`,`btree`,`哈希`,`杜松子酒`,`要旨`,`顺序`,`专家组`,`布林`, 和`通用的`.只有超级用户可以更改此设置。 `wal_debug`(`布尔值`)[](<>) 如果打开,则发出与 WAL 相关的调试输出。此参数仅在以下情况下可用`WAL_DEBUG`宏是在编译 PostgreSQL 时定义的。 `忽略校验和失败`(`布尔值`)[](<>) 仅在以下情况下有效[数据校验和](app-initdb.html#APP-INITDB-DATA-CHECKSUMS)已启用。 在读取期间检测到校验和失败通常会导致 PostgreSQL 报告错误,中止当前事务。环境`忽略校验和失败`到 on 会使系统忽略故障(但仍报告警告),并继续处理。这种行为可能*导致崩溃、传播或隐藏损坏或其他严重问题*.但是,如果块头仍然正常,它可能允许您克服错误并检索可能仍存在于表中的未损坏元组。如果标头损坏,即使启用此选项也会报告错误。默认设置是`离开`,并且只能由超级用户更改。 `zero_damaged_pa​​ges`(`布尔值`)[](<>) 检测到损坏的页头通常会导致 PostgreSQL 报告错误,中止当前事务。环境`zero_damaged_pa​​ges`设为 on 会导致系统改为报告警告,将内存中损坏的页面清零,然后继续处理。这种行为*会破坏数据*,即损坏页面上的所有行。但是,它确实允许您克服错误并从表中可能存在的任何未损坏页面中检索行。如果由于硬件或软件错误而发生损坏,它对于恢复数据很有用。在您放弃从表的损坏页面中恢复数据的希望之前,您通常不应该设置此选项。清零页面不会强制到磁盘,因此建议在再次关闭此参数之前重新创建表或索引。默认设置是`离开`,并且只能由超级用户更改。 `忽略无效页面`(`布尔值`)[](<>) 如果设置为`离开`(默认),在恢复期间检测到引用无效页面的 WAL 记录会导致 PostgreSQL 引发 PANIC 级别的错误,从而中止恢复。环境`忽略无效页面`到`在`导致系统忽略 WAL 记录中的无效页面引用(但仍报告警告),并继续恢复。这种行为可能*导致崩溃、数据丢失、传播或隐藏损坏或其他严重问题*.但是,它可能允许您通过 PANIC 级别的错误,完成恢复,并导致服务器启动。该参数只能在服务器启动时设置。它仅在恢复或待机模式下有效。 `jit_debugging_support`(`布尔值`)[](<>) 如果 LLVM 具有所需的功能,请将生成的函数注册到 GDB。这使得调试更容易。默认设置是`离开`.此参数只能在服务器启动时设置。 `jit_dump_bitcode`(`布尔值`)[](<>) 将生成的 LLVM IR 写入文件系统内部[数据\_目录](runtime-config-file-locations.html#GUC-DATA-DIRECTORY).这仅对处理 JIT 实现的内部有用。默认设置是`离开`.此参数只能由超级用户更改。 `jit_expressions`(`布尔值`)[](<>) 当激活 JIT 编译时,确定表达式是否被 JIT 编译(参见[第 32.2 节](jit-decision.html))。默认是`在`. `jit_profiling_support`(`布尔值`)[](<>) 如果 LLVM 具有所需的功能,则发出允许 perf 分析 JIT 生成的函数所需的数据。这会将文件写入`~/.debug/jit/`;用户负责在需要时执行清理。默认设置是`离开`.此参数只能在服务器启动时设置。 `jit_tuple_deforming`(`布尔值`)[](<>) 确定元组变形是否为 JIT 编译,当激活 JIT 编译时(参见[第 32.2 节](jit-decision.html))。默认是`在`. `remove_temp_files_after_crash`(`布尔值`)[](<>) 当设置为`在`,这是默认设置,PostgreSQL 会在后端崩溃后自动删除临时文件。如果禁用,文件将被保留并可用于调试,例如。然而,反复崩溃可能会导致无用文件的积累。该参数只能在`postgresql.conf`文件或在服务器命令行上。