↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 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

20.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.c 和 pg_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) #

新服务器进程刚刚派生之后、执行认证过程之前的延迟时间。这旨在给开发者一个机会,用调试器附加到服务器进程上,跟踪认证过程中的异常行为。如果指定值时没有单位,则以秒为单位。零值(默认值)禁用延迟。这个参数只能在 postgresql.conf 文件中或在服务器命令行上设置。

trace_notify (boolean) #

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

trace_recovery_messages (enum) #

启用原本不会记录的恢复相关调试输出。此参数允许用户覆盖 log_min_messages 的常规设置,但仅针对特定消息。它旨在用于调试热备。有效值为 DEBUG5、DEBUG4、DEBUG3、DEBUG2、DEBUG1 和 LOG。默认值 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 以检查所有记录,或者设置为逗号分隔的资源管理器列表,以仅检查来自这些资源管理器的记录。目前支持的资源管理器有 heap、heap2、btree、hash、gin、gist、sequence、spgist、brin 和 generic。扩展可以定义额外的资源管理器。只有超级用户和具有适当 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。只有超级用户和具有适当 SET 权限的用户才能在会话开始时更改此参数,并且在会话内完全不能更改它。

jit_dump_bitcode (boolean) #

将生成的 LLVM IR 写入文件系统,位于 data_directory 内。这仅对开发 JIT 的内部实现有用。默认设置为 off。只有超级用户和具有适当 SET 权限的用户才能更改此设置。

jit_expressions (boolean) #

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

jit_profiling_support (boolean) #

如果 LLVM 具有所需的功能,则输出让 perf 对 JIT 生成的函数进行性能分析所需的数据。这会将文件写入 ~/.debug/jit/;用户应在需要时自行清理。默认设置为 off。只有超级用户和具有适当 SET 权限的用户才能在会话开始时更改此参数,并且在会话内完全不能更改它。

jit_tuple_deforming (boolean) #

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

remove_temp_files_after_crash (boolean) #

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

send_abort_for_crash (boolean) #

默认情况下,后端崩溃后,主进程会向其余子进程发送 SIGQUIT 信号使其停止,这样它们可以较为平稳地退出。当该选项设置为 on 时,则改为发送 SIGABRT。这通常会让每个这类子进程生成一个 core dump 文件。这有助于在崩溃后调查其他进程的状态。但在反复崩溃时,它也可能消耗大量磁盘空间,因此不要在未严密监控的系统上启用它。请注意,系统并不支持自动清理这些 core 文件。这个参数只能在 postgresql.conf 文件中或服务器命令行中设置。

send_abort_for_kill (boolean) #

默认情况下,在尝试用 SIGQUIT 停止子进程之后,主进程会等待五秒,然后发送 SIGKILL 强制立即终止。当该选项设置为 on 时,则会发送 SIGABRT 而不是 SIGKILL。这通常会让每个这类子进程生成一个 core dump 文件。这有助于调查那些“卡住”的子进程状态。但在反复崩溃时,它也可能消耗大量磁盘空间,因此不要在未严密监控的系统上启用它。请注意,系统并不支持自动清理这些 core 文件。这个参数只能在 postgresql.conf 文件中或服务器命令行中设置。

debug_logical_replication_streaming (enum) #

允许值为 buffered 和 immediate。默认值为 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 时,领导者会将所有更改序列化到文件,并通知并行应用工作进程在事务结束时读取并应用这些更改。

报告文档问题

阅读 上游文档. 通过 PostgreSQL 文档反馈表单.