19.17. 开发人员选项

以下参数旨在用于 PostgreSQL 源代码,并且在某些情况下有助于恢复严重受损的数据库。应该没有理由在生产数据库上使用它们。因此,它们已从示例postgresql.conf文件中排除。请注意,这些参数中的许多参数都需要特殊的源代码编译标志才能完全起作用。

  • allow_system_table_mods ( boolean )

    • 允许修改系统表的结构。由initdb使用。该参数只能在服务器启动时设置。
  • ignore_system_indexes ( boolean )

    • 读取系统表时忽略系统索引(但在修改表时仍会更新索引)。从损坏的系统索引中恢复时,这很有用。会话启动后无法更改此参数。
  • post_auth_delay ( integer )

    • 如果不为零,则在执行身份验证过程之后,启动新的服务器进程时,会发生许多秒的延迟。目的是使开发人员有机会使用调试器附加到服务器进程。会话启动后无法更改此参数。
  • pre_auth_delay ( integer )

    • 如果不为零,那么在新的服务器进程被派生之后,在执行身份验证过程之前,会发生这么多秒的延迟。目的是使开发人员有机会使用调试器附加到服务器进程,以跟踪身份验证中的不良行为。此参数只能在postgresql.conf文件或服务器命令行中设置。
  • trace_notify ( boolean )

    • LISTENNOTIFY命令生成大量调试输出。 client_min_messageslog_min_messages必须为DEBUG1或更低,才能将此输出分别发送到 Client 端或服务器日志。
  • 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 )

    • 如果启用,则发出有关锁使用情况的信息。转储的信息包括锁定操作的类型,锁定的类型以及被锁定或解锁的对象的唯一标识符。还包括此对象已授予的锁定类型以及此对象已 await 的锁定类型的位掩码。对于每种锁类型,也会转储授予的锁和 await 的锁的数量以及总数。此处显示了日志文件输出的示例:
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 记录一起修改的所有缓冲区的全页图像添加到该 Logging。如果随后重放记录,则系统将首先应用每个记录,然后测试记录修改的缓冲区是否与存储的图像匹配。在某些情况下(例如提示位),较小的变化是可以接受的,并且将被忽略。任何意外的差异都将导致致命错误,从而终止恢复。

此设置的默认值为空字符串,该字符串将禁用该功能。可以将其设置为all以检查所有记录,也可以将其设置为以逗号分隔的资源 Management 器列表以仅检查源自那些资源 Management 器的记录。当前,受支持的资源 Management 器是heapheap2btreehashgingistsequencespgistbringeneric。只有超级用户可以更改此设置。

  • wal_debug ( boolean )

    • 如果启用,则发出与 WAL 相关的调试输出。仅当在编译 PostgreSQL 时定义了WAL_DEBUG宏时,此参数才可用。
  • ignore_checksum_failure ( boolean )

在读取期间检测到校验和失败通常会导致 PostgreSQL 报告错误,从而中止当前事务。将ignore_checksum_failure设置为 on 将导致系统忽略故障(但仍报告警告),并 continue 处理。此行为可能导致崩溃,传播或隐藏损坏或其他严重问题。但是,它可以使您克服错误并检索未损坏的 Tuples,如果块头仍然健全,则该 Tuples 可能仍存在于表中。如果标题损坏,即使启用此选项,也会报告错误。默认设置为off,并且只能由超级用户更改。

  • zero_damaged_pages ( boolean )

    • 检测到损坏的页眉通常会导致 PostgreSQL 报告错误,从而中止当前事务。将zero_damaged_pages设置为 on 将导致系统报告警告,将内存中损坏的页面清零,然后 continue 处理。这种行为将破坏数据,即损坏页面上的所有行。但是,它确实允许您克服错误并从表中可能存在的任何未损坏页面中检索行。如果由于硬件或软件错误而发生损坏,它对于恢复数据很有用。通常,除非您已经放弃从表的损坏页面中恢复数据的希望,否则不应该将其设置为 on。调零的页面不会强制插入磁盘,因此建议在重新关闭此参数之前重新创建表或索引。默认设置为off,并且只能由超级用户更改。
  • jit_debugging_support ( boolean )

    • 如果 LLVM 具有所需的功能,请向 GDB 注册生成的功能。这使调试更加容易。默认设置为off。该参数只能在服务器启动时设置。
  • jit_dump_bitcode ( boolean )

    • 将生成的 LLVM IR 写入文件data_directory内。这仅对处理 JIT 实现的内部有用。默认设置为off。该参数只能由超级用户更改。
  • jit_expressions ( boolean )

    • 确定在激活 JIT 编译时是否对表达式进行 JIT 编译(请参见Section 32.2)。默认值为on
  • jit_profiling_support ( boolean )

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

    • 确定在激活 JIT 编译时是否对 JIT 编译 Tuples 变形(请参见Section 32.2)。默认值为on