18.15. 开发人员选项

下面的选项目的是在PostgreSQL代码上使用, 并且在某些情况下可以帮助恢复严重损坏了的数据库。在生产环境里没有理由 使用这些设置。因此,我们把他们从样例postgresql.conf 文件中排除了出去。请注意许多这些选项要求特殊的源代码编译标志才能运转。

allow_system_table_mods(boolean)

允许修改系统表的结构。它可以被initdb使用。 这个值只能在服务器启动的时候设置。

debug_assertions(boolean)

打开各种断言检查。这是调试助手。如果你经历了奇怪的问题或者崩溃, 那么你可能会想把这个打开,因为它可能暴露编程的错误。要使用这个 选项,我们必须在编译PostgreSQL 的时候定义宏USE_ASSERT_CHECKING (通过configure选项 --enable-cassert完成)。请注意,如果启用断言 选项编译PostgreSQL,那么 debug_assertions缺省就是 on 。

ignore_system_indexes(boolean)

读取系统表时忽略系统索引(但是修改系统表时依然同时修改索引)。 这个在从系统索引被破坏的表中恢复数据的时候很有用。该参数不能在 会话启动之后修改。

post_auth_delay(integer)

如果为非零,那么在一个新的服务器进程启动并完成认证过程之后, 就会延迟这么多秒。这样就给我们一个机会用调试器附着在一个服务器 进程上跟踪认证里面的异常行为。该参数不能在会话启动之后修改。

pre_auth_delay(integer)

如果为非零,那么在一个新的服务器进程派生出来之后,就会延迟这么多秒, 然后才会继续认证过程。这样就给我们一个机会用调试器附着在一个服务器 进程上跟踪认证里面的异常行为。这个选项只能在服务器启动的时候或者 在postgresql.conf文件里设置。

trace_notify(boolean)

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

trace_recovery_messages(enum)

启用记录与恢复有关的调试输出,否则无法记录。这个参数允许用户 覆盖log_min_messages的设置,但只用于具体消息。 主要在调试备库时用。有效值包括DEBUG5DEBUG4DEBUG3DEBUG2DEBUG1LOGLOG(缺省值)完全不会影响记录。其他值会记录优先或更高的恢复相关的 调试信息,只要具有LOG优先;对于log_min_messages的 普通设置,会无条件的将信息发送给服务器日志。这个参数只能在postgresql.conf 文件中或服务器启动时设置。

trace_sort(boolean)

如果打开,发出在排序操作中的资源使用的有关信息。这个选项只有在编译 PostgreSQL的时候定义了 TRACE_SORT宏的时候才可用(不过,目前 TRACE_SORT缺省就是定义了的值)。

trace_locks(boolean)

如果开启,发出锁使用情况的信息。dump信息中包括锁操作的类型,锁的类型和 被锁或未锁的对象的唯一标识符。同样包括的还有已经授予这个对象的锁类型的位掩码和 等待这个对象的锁类型的位掩码。对每一个锁来说,授权锁和等待锁个数的统计也会一起dump。 一个日志文件输出的例子如下:

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)

被dump的结构的详细信息可以在src/include/storage/lock.h中查看。

如果在编译PostgreSQL时定义了LOCK_DEBUG宏,才可以使用这个参数。

trace_lwlocks(boolean)

如果开启,发出轻量级锁的使用信息。 轻量级锁主要是为了主要的目的是提供互斥访问共享内存的数据结构。

如果在编译PostgreSQL时定义了LOCK_DEBUG宏,才可以使用这个参数。

trace_userlocks(boolean)

如果开启了,发出关于用户锁定使用的信息。与trace_locks的输出一样, 不过是只用于用户锁。

从8.2开始就废除了用户锁,这个选项现在已经无效了。

如果在编译PostgreSQL时定义了LOCK_DEBUG宏, 才可以使用这个参数。

trace_lock_o idmin(integer)

如果设置了,不会跟踪小于这个OID的锁。

如果在编译PostgreSQL时定义了LOCK_DEBUG宏, 才可以使用这个参数。

trace_lock_table(integer)

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

如果在编译PostgreSQL时定义了LOCK_DEBUG宏, 才可以使用这个参数。

debug_deadlocks(boolean)

如果设置,死锁时发生超时,dump所有当前锁的信息。

如果在编译PostgreSQL时定义了LOCK_DEBUG宏, 才可以使用这个参数。

log_btree_build_stats(boolean)

如果设置,会记录B-tree操作上的系统资源使用情况统计(内存和CPU)。

如果在编译PostgreSQL时定义了BTREE_BUILD_STATS宏, 才可以使用这个参数。

wal_debug(boolean)

打开 WAL 相关的调试输出。只有在编译PostgreSQL 的时候打开了WAL_DEBUG宏的情况下,这个选项才可用。

zero_damaged_pages(boolean)

如果侦测到一个损坏了的页面头通常会导致PostgreSQL 报告一个错误,并且退出当前命令。把zero_damaged_pages 设置为 on 则令系统报告一个警告,把损坏的页面填充零,然后继续处理。 这种行为会will destroy data,也就是所有在已经损坏 页面上的行。但是它允许你绕开坏页面然后从表中尚存的未损坏页面上继续 检索数据行。因此它在因为硬件或者软件错误导致的崩溃中进行恢复是很 有用的。通常你不应该把它设置为 on ,除非你已经彻底放弃从崩溃 的页面中恢复数据。缺省的设置是off,并且只有超级 用户可以改变它。