支持的版本: 当前 (17) / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1

19.17. 开发者选项 #

以下参数旨在用于开发者测试,绝不应在生产数据库中使用。但是,其中一些参数可以用来协助恢复严重损坏的数据库。因此,它们已从示例 postgresql.conf 文件中排除。请注意,许多这些参数需要特殊的源代码编译标志才能正常工作。

allow_in_place_tablespaces (boolean) #

允许在将空位置字符串提供给 CREATE TABLESPACE 命令时,将表空间创建为 pg_tblspc 内的目录。这旨在允许测试主服务器和备用服务器在同一机器上运行的复制场景。此类目录可能会混淆期望在该位置仅找到符号链接的备份工具。只有超级用户和具有适当 SET 权限的用户才能更改此设置。

allow_system_table_mods (boolean) #

允许修改系统表的结构以及系统表上的某些其他危险操作。即使对于超级用户,通常也不允许这样做。不当使用此设置可能会导致不可挽回的数据丢失或严重损坏数据库系统。只有超级用户和具有适当 SET 权限的用户才能更改此设置。

backtrace_functions (string) #

此参数包含一个以逗号分隔的 C 函数名称列表。如果引发错误,并且发生错误的内部 C 函数的名称与列表中的值匹配,则会将回溯与错误消息一起写入服务器日志。这可以用于调试源代码的特定区域。

并非所有平台都提供回溯支持,并且回溯的质量取决于编译选项。

只有超级用户和具有适当 SET 权限的用户才能更改此设置。

debug_discard_caches (integer) #

设置为 1 时,每个系统目录缓存条目都会在第一个可能的机会失效,而不管是否真的发生了任何会导致其失效的事情。系统目录的缓存实际上被禁用,因此服务器将运行得非常缓慢。更高的值会递归地运行缓存失效,这会更慢,并且仅对于测试缓存逻辑本身有用。默认值 0 选择正常的目录缓存行为。

当尝试触发涉及并发目录更改的难以重现的错误时,此参数可能非常有用,但在其他情况下很少需要。有关详细信息,请参见源代码文件 inval.cpg_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 时获得的输出相匹配。

ignore_system_indexes (boolean) #

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

post_auth_delay (integer) #

在启动新的服务器进程后,在它执行身份验证过程时延迟的时间量。这旨在让开发人员有机会使用调试器附加到服务器进程。如果指定此值时没有单位,则将其视为秒。值为零(默认值)会禁用延迟。此参数在会话开始后无法更改。

pre_auth_delay (integer) #

新服务器进程 fork 后,在执行身份验证过程之前要延迟的时间量。这旨在为开发人员提供机会,使用调试器附加到服务器进程,以追踪身份验证中的错误行为。如果此值在指定时没有单位,则将其视为秒。值为零(默认值)将禁用延迟。此参数只能在 postgresql.conf 文件或服务器命令行中设置。

trace_notify (boolean) #

LISTENNOTIFY 命令生成大量的调试输出。client_min_messageslog_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 以检查所有记录,或设置为逗号分隔的资源管理器列表,以仅检查来自这些资源管理器的记录。目前,支持的资源管理器为 heapheap2btreehashgingistsequencespgistbringeneric。扩展程序可以定义其他资源管理器。只有超级用户和具有适当 SET 权限的用户才能更改此设置。

wal_debug (boolean) #

如果启用,则发出与 WAL 相关的调试输出。只有在编译 PostgreSQL 时定义了 WAL_DEBUG 宏,此参数才可用。

ignore_checksum_failure (boolean) #

仅在启用数据校验和时才有效。

在读取期间检测到校验和失败通常会导致 PostgreSQL 报告错误,从而中止当前事务。将 ignore_checksum_failure 设置为 on 会导致系统忽略失败(但仍会报告警告)并继续处理。此行为可能会导致崩溃、传播或隐藏损坏或其他严重问题。但是,如果块头仍然正常,它可能允许您绕过错误并检索表中可能仍然存在的未损坏的元组。如果头损坏,即使启用了此选项,也会报告错误。默认设置为 off。只有超级用户和具有适当 SET 权限的用户才能更改此设置。

zero_damaged_pages (boolean) #

检测到损坏的页面头通常会导致 PostgreSQL 报告错误,从而中止当前事务。将 zero_damaged_pages 设置为 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 编译时是否对表达式进行 JIT 编译(请参见第 30.2 节)。默认值为 on

jit_profiling_support (boolean) #

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

jit_tuple_deforming (boolean) #

确定在激活 JIT 编译时是否对元组变形进行 JIT 编译(请参见第 30.2 节)。默认值为 on

remove_temp_files_after_crash (boolean) #

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

send_abort_for_crash (boolean) #

默认情况下,在后端崩溃后,postmaster 将通过向剩余的子进程发送 SIGQUIT 信号来停止它们,这允许它们或多或少地正常退出。当此选项设置为 on 时,将改为发送 SIGABRT。这通常会导致为每个这样的子进程生成一个核心转储文件。这对于在崩溃后调查其他进程的状态非常有用。在重复崩溃的情况下,它也可能占用大量磁盘空间,因此请勿在您未仔细监控的系统上启用此选项。请注意,没有自动清理核心文件的支持。此参数只能在 postgresql.conf 文件中或在服务器命令行上设置。

send_abort_for_kill (boolean) #

默认情况下,在尝试使用 SIGQUIT 停止子进程后,postmaster 将等待五秒钟,然后发送 SIGKILL 以强制立即终止。当此选项设置为 on 时,将发送 SIGABRT 而不是 SIGKILL。这通常会导致为每个这样的子进程生成一个核心转储文件。这对于调查卡住的子进程的状态非常有用。在重复崩溃的情况下,它也可能占用大量磁盘空间,因此请勿在您未仔细监控的系统上启用此选项。请注意,没有自动清理核心文件的支持。此参数只能在 postgresql.conf 文件中或在服务器命令行上设置。

debug_logical_replication_streaming (enum) #

允许的值为 bufferedimmediate。默认值为 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 时,主进程将所有更改序列化到文件,并通知并行应用工作进程在事务结束时读取并应用它们。

提交更正

如果您在文档中发现任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用此表单报告文档问题。