2024 年 9 月 26 日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持的版本: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 文件的 wal_init

某些操作系统和文件系统不支持直接 I/O,因此非默认设置可能会在启动时被拒绝或导致错误。

目前,此功能会降低性能,仅用于开发人员测试。

debug_parallel_query (enum) #

允许在预计没有性能提升的情况下,出于测试目的使用并行查询。debug_parallel_query 的允许值为 off(仅在预计可以提高性能时才使用并行模式)、on(强制为所有预计安全执行的查询执行并行查询)和 regress(与 on 相同,但具有以下解释的额外行为变化)。

更准确地说,将此值设置为 on 将在任何预计安全的查询计划的顶部添加一个 Gather 节点,以便查询在并行工作程序内部运行。即使没有可用的并行工作程序或无法使用,如果计划程序认为这会导致查询失败,也会禁止启动子事务等操作,这些操作在并行查询上下文中是被禁止的。如果在此选项设置后发生故障或意外结果,则查询使用的某些函数可能需要标记为 PARALLEL UNSAFE(或者,可能为 PARALLEL RESTRICTED)。

将此值设置为 regress 会产生与将其设置为 on 相同的效果,以及一些其他效果,旨在简化自动化回归测试。通常,来自并行工作程序的消息包含一个指示该内容的上下文行,但是 regress 的设置会抑制此行,因此输出与非并行执行中的输出相同。此外,EXPLAIN 输出中会隐藏此设置在计划中添加的 Gather 节点,以便输出与将此设置关闭时获得的输出匹配。

ignore_system_indexes (boolean) #

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

post_auth_delay (integer) #

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

pre_auth_delay (integer) #

在新的服务器进程分叉后立即延迟的时间量,在它进行身份验证过程之前。这旨在让开发人员有机会使用调试器附加到服务器进程,以跟踪身份验证中的错误行为。如果指定此值但未指定单位,则将其视为秒。值为零(默认值)将禁用延迟。此参数只能在 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 会导致系统改为报告警告,将损坏的页面在内存中清零,并继续处理。此行为 将破坏数据,即损坏页面上的所有行。但是,它确实允许您绕过错误并从表中可能存在的任何未损坏页面中检索行。它对于在因硬件或软件错误而导致损坏发生时恢复数据非常有用。您通常不应将其设置为 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 编译(参见 第 30.2 节)时是否对表达式进行 JIT 编译。默认值为 on

jit_profiling_support (boolean) #

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

jit_tuple_deforming (boolean) #

确定何时激活 JIT 编译(参见 第 30.2 节)时是否对元组变形进行 JIT 编译。默认值为 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。这通常会导致为每个这样的子进程生成一个核心转储文件。这对于调查 卡住 子进程的状态很有用。它也会在重复崩溃的情况下消耗大量磁盘空间,因此不要在没有仔细监控的系统上启用此选项。请注意,没有自动清理核心文件(s)的支持。此参数只能在 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 指示 leader 应用工作者将更改发送到共享内存队列或将所有更改序列化到文件中。当设置为 buffered 时,leader 通过共享内存队列将更改发送到并行应用工作者。当设置为 immediate 时,leader 将所有更改序列化到文件,并在事务结束时通知并行应用工作者读取和应用这些更改。

提交更正

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