2025年9月25日: PostgreSQL 18 发布!
支持的版本:当前18) / 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_copy_parse_plan_trees (boolean) #

启用此选项会强制所有解析树和计划树通过 copyObject() 进行处理,以方便捕获 copyObject() 中的错误和遗漏。默认为关闭。

此参数仅在编译时定义了 DEBUG_NODE_TESTS_ENABLED(使用 configure 选项 --enable-cassert 时会自动发生)时可用。

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 输出中是隐藏的,以便输出与将此设置关闭时获得的内容相匹配。

debug_raw_expression_coverage_test (boolean) #

启用此选项会强制 DML 语句的所有原始解析树由 raw_expression_tree_walker() 扫描,以方便捕获该函数中的错误和遗漏。默认为关闭。

此参数仅在编译时定义了 DEBUG_NODE_TESTS_ENABLED(使用 configure 选项 --enable-cassert 时会自动发生)时可用。

debug_write_read_parse_plan_trees (boolean) #

启用此选项会强制所有解析树和计划树通过 outfuncs.c/readfuncs.c 进行处理,以方便捕获这些模块中的错误和遗漏。默认为关闭。

此参数仅在编译时定义了 DEBUG_NODE_TESTS_ENABLED(使用 configure 选项 --enable-cassert 时会自动发生)时可用。

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) #

如果开启,则发出有关排序操作期间资源使用情况的信息。

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

如果 LOCK_DEBUG 宏在编译 PostgreSQL 时被定义,则此参数可用。

trace_lwlocks (boolean) #

如果开启,则发出有关轻量级锁使用情况的信息。轻量级锁主要用于提供对共享内存数据结构的访问的互斥。

如果 LOCK_DEBUG 宏在编译 PostgreSQL 时被定义,则此参数可用。

trace_userlocks (boolean) #

如果开启,则发出有关用户锁使用情况的信息。输出与 trace_locks 相同,仅针对通知锁。

如果 LOCK_DEBUG 宏在编译 PostgreSQL 时被定义,则此参数可用。

trace_lock_oidmin (integer) #

如果设置,则不跟踪小于此 OID 的表上的锁(用于避免在系统表上输出)。

如果 LOCK_DEBUG 宏在编译 PostgreSQL 时被定义,则此参数可用。

trace_lock_table (integer) #

无条件跟踪此表(OID)上的锁。

如果 LOCK_DEBUG 宏在编译 PostgreSQL 时被定义,则此参数可用。

debug_deadlocks (boolean) #

如果设置,则在发生死锁超时时转储所有当前锁的信息。

如果 LOCK_DEBUG 宏在编译 PostgreSQL 时被定义,则此参数可用。

log_btree_build_stats (boolean) #

如果设置,则记录 B-tree 操作期间的系统资源使用统计信息(内存和 CPU)。

如果 BTREE_BUILD_STATS 宏在编译 PostgreSQL 时被定义,则此参数可用。

wal_consistency_checking (string) #

此参数旨在用于检查 WAL 重做例程中的错误。启用后,修改 WAL 记录的任何缓冲区的全页映像将添加到记录中。如果随后重放记录,系统将首先应用每个记录,然后测试由记录修改的缓冲区是否与存储的映像匹配。在某些情况下(例如,提示位),细微的差异是可以接受的,并且将被忽略。任何意外的差异都将导致致命错误,终止恢复。

此设置的默认值是空字符串,这会禁用该功能。它可以设置为 all 以检查所有记录,或设置为一个逗号分隔的资源管理器列表,仅检查来自这些资源管理器的记录。当前支持的资源管理器是 heapheap2btreehashgingistsequencespgistbringeneric。扩展程序可以定义额外的资源管理器。只有超级用户和具有适当 SET 权限的用户才能更改此设置。

wal_debug (boolean) #

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

ignore_checksum_failure (boolean) #

仅当启用了 -k 时才有效。

读取过程中检测到校验和失败时,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) #

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

send_abort_for_kill (boolean) #

默认情况下,在尝试使用 SIGQUIT 停止子进程后,主进程将等待五秒钟,然后发送 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 时,主进程将所有更改序列化到文件,并通知并行应用工作进程在事务结束时读取并应用它们。

提交更正

如果您在文档中发现任何不正确、与您对特定功能的实际体验不符或需要进一步阐明的地方,请使用 此表格 报告文档问题。