20.17. 开发者选项

下面的参数目的是用在开发测试上, 并且永远不能用于生产数据库。 但是,它们中的一些能够用于帮助恢复严重损坏的数据库。 同样,它们被从例子postgresql.conf文件中排除。 请注意许多这些参数要求特殊的源代码编译标志才能工作。

allow_system_table_mods (boolean)

允许对系统表结构的修改,以及对系统表的某些其他危险操作。这是不允许的,即使是对超级用户。 不理智地使用此设置可能导致无法恢复的数据丢失或严重损坏数据库系统。只有超级用户才能更改此设置

backtrace_functions (string)

这个参数包含一个以逗号分隔的C函数名称列表。 如果出现错误,并且发生错误的内部C函数的名称与列表中的值相匹配,那么将向服务器日志中写入一个回溯跟踪信息和错误消息。 这可以用来调试源代码的特定区域。

回溯支持并非在所有平台上都可以使用,并且回溯的质量取决于编译选项。

该参数只能由超级用户设置。

debug_discard_caches (integer)

当设置为1时,每个系统目录缓存条目在第一个可能的机会时失效,不管任何使之无效的事情是否真的发生。 作为结果,系统目录的缓存被有效地禁用,因此服务器将运行得非常缓慢。 较高的值递归地运行缓存失效,这样会更慢,而且只用于测试缓存逻辑自身。 默认值0选择正常的目录缓存行为。

当试图触发涉及并发目录更改的难以复现的错误时,此参数非常有用,但除此之外它不太被需要。 详请参见源码文件inval.cpg_config_manual.h

DISCARD_CACHES_ENABLED在编译时定义时,可支持此参数(当使用configure option --enable-cassert时自动发生)。 在生产建设中,它的值总是0,并且试图将它设置为另一个值将引发错误。

force_parallel_mode (enum)

允许应用并行查询作为测试目的,即使在没有预期性能好处的情况下。 force_parallel_mode 的允许值为off(仅在期望提高性能时使用并行模式), on(对被认为是安全的所有查询强制并行查询), 以及regress (类似on,但是有额外的行为变化在下面说明)。

更具体地说,将该值设置为on的将在看起来安全的任何查询计划的顶部添加一个Gather 节点,以便查询在并行worker内部运行。 即使当并行worker不可用或不能使用时,例如启动子事务之类的操作将被禁止,在并行查询上下文中将被禁止,除非规划器认为这会导致查询失败。 如果设置此选项时发生失败或意外结果,查询使用的一些函数可能需要被标记为PARALLEL UNSAFE(或者,可能是PARALLEL RESTRICTED)。

设置该值为regress与设置为on 具有相同的所有效果,加上一些附加效果,为了便于自动回归测试。 通常,来自并行worker的消息包含一个上下文行表示之, 但是regress的设置会抑制这一行,因此输出与非并行执行时相同。 此外,通过此设置隐藏在EXPLAIN输出中,Gather节点添加到计划,以便输出匹配如果将此设置off将获得的结果。

ignore_system_indexes (boolean)

读取系统表时忽略系统索引(但是修改系统表时依然同时更新索引)。这在从被破坏的系统索引中恢复数据的时有用。这个参数在会话开始之后不能被更改。

post_auth_delay (integer)

执行身份验证过程后启动新服务器进程时延迟的时间量。这是为了给开发者们一个机会在一个服务器进程上附加一个调试器。 如果指定值时没有单位,则以秒为单位。0值(默认值)禁用延迟。这个参数在会话开始之后不能被更改。

pre_auth_delay (integer)

在新服务器进程分叉后,在进行身份验证过程之前,延迟的时间量。这是为了给开发者们一个机会在一个服务器进程上附加一个调试器来跟踪认证过程中的不当行为。 如果指定值时没有单位,则以秒为单位。0值(默认值)禁用延迟。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。

trace_notify (boolean)

LISTENNOTIFY命令生成大量调试输出。client_min_messageslog_min_messages必须是DEBUG1或者更低才能把这种输出分别发送到客户端或者服务器日志。

trace_recovery_messages (enum)

启用记录与恢复有关的调试输出,否则无法记录。这个参数允许用户覆盖log_min_messages的正常设置,但只用于指定的消息。这个参数的目的是用来调试热后备。有效值包括DEBUG5DEBUG4DEBUG3DEBUG2DEBUG1LOG。默认值LOG完全不会影响日志决定。其他值会记录相关级别或更高级别的与恢复相关的调试消息,就好像它们具有LOG优先级一样;对于log_min_messages的通用设置,这会无条件的将消息发送给服务器日志。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。

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以检查所有记录,或者被设置为一个逗号分隔的资源管理器列表用以检查那些资源管理器产生的记录。当前,支持的资源管理器是heapheap2btreehashgingistsequencespgistbrin以及generic。只有超级用户可以更改这一设置。

wal_debug (boolean)

如果被打开,WAL 相关的调试输出将被发出。只有在编译PostgreSQL时定义了WAL_DEBUG宏的情况下,这个参数才可用。

ignore_checksum_failure (boolean)

只有当data checksums被启用时才有效。

在读取过程中检测到一次校验码失败通常会导致PostgreSQL报告一个错误。设置ignore_checksum_failure为打开会导致系统忽略失败(但是仍然报告一个警告),并且继续执行。这种行为可能导致崩溃、传播或隐藏损坏或者其他严重的问题。但是,它允许你绕过错误并且在块头部仍然健全的情况下从表中检索未损坏的元组。如果头部被损坏,即便这个选项被启用系统也将报告一个错误。默认设置是off,并且只能被超级用户改变。

zero_damaged_pages (boolean)

检测到一个损坏的页面头部通常会导致PostgreSQL报告一个错误,并且中止当前事务。把zero_damaged_pages设置为打开会让系统报告一个警告、把损坏的页面填充零,然后继续处理。这种行为会毁掉数据,即被损坏页面上的所有行。但是它允许你绕开错误并且从可能存在表中的任何未损坏页面中检索行。如果由于一次硬件或软件错误而发生毁坏,这种方法可用于恢复数据。通常你不应该把它设置为打开,除非你已经彻底放弃从表的损坏页面中恢复数据。被填充零的页面不会被强制到磁盘上,因此我们推荐在再次关闭这个参数之前先重建表或索引。默认的设置是off,并且只有超级用户可以改变它。

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。这个参数只能由超级用户修改。

jit_expressions (boolean)

当JIT编译被激活时(见第 32.2 节),确定表达式是否用JIT编译。默认值是on

jit_profiling_support (boolean)

如果LLVM有所需的功能,发出需要的数据以允许perf对JIT生成的函数画像。 这会写出文件到~/.debug/jit/中,如果需要,由用户负责对其执行清除。 默认设置是off。 这个参数只能在服务器启动时设置。

jit_tuple_deforming (boolean)

当JIT编译被激活时(见第 32.2 节),确定元组拆解是否被JIT编译。默认值是on

remove_temp_files_after_crash (boolean)

当设置为on时,这是默认值,PostgreSQL将在后端崩溃后自动删除临时文件。 如果禁用,文件将被保留,并且也许可用于调试,例如。 重复的崩溃可能会导致无用文件的积累。 该参数只能在postgresql.conf文件中或服务器命令行中设置。