↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / 配置参数 / 开发者选项

CONFIGURATION PARAMETER开发者选项

ignore_system_indexes

读取系统表时忽略系统索引(但是修改系统表时依然同时更新索引)。

Disables reading from system indexes.

布尔 连接时 引入 8.2 现存至 20 devel 0 次默认值变更

类型
布尔bool
上下文
连接时只能在连接建立时设置,会话内不能再改
默认值
off
引入版本
8.2
状态
现存

PostgreSQL 18.7 手册 官方文档

版本轨迹

相对 PostgreSQL 17 无变化。

默认值变迁

off 9.0 – 19

已记录的默认值在 PostgreSQL 9.0–19 之间未变。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。

手册说明

PostgreSQL 18.7 手册 · 19.17 开发人员选项 本站手册 官方原文

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

机制详解

ignore_system_indexes 让新启动后端读取系统目录时不使用系统索引,但修改目录时仍更新索引;用于从损坏的系统索引中恢复。

其 backend 上下文在会话启动时固定,因此在现有会话内修改无效;目录扫描可能变得很慢。

该模式不会修复索引,只是提供检查数据并 REINDEX 损坏系统索引的路径。长期启用会掩盖症状并造成广泛目录开销。其 backend 上下文在连接启动时固定,现有会话不能修改。

调优建议

按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。

  • OLTP在线事务处理

    绝不能把 ignore_system_indexes 当作调优或常态可用性设置。应停止写入、保全不可变副本、用尽备份/存储修复、记录预期数据损失、窄范围抢救、重建并验证后才可恢复服务。

  • OLAP分析与批处理

    只读分析也不会让 ignore_system_indexes 安全:损坏页面仍会污染结果或结构。只能在可丢弃抢救副本上使用,并明确接受数据丢失。

  • 小规格低配实例与开发机

    不能因为没有副本就直接启用 ignore_system_indexes。先保全原件并寻找干净备份;该开关可能把可见损坏变成静默丢失。

常见问题

  • 限时诊断或恢复任务结束后仍让 ignore_system_indexes 保持启用。
  • 在生产数据的唯一副本上进行实验。
  • 低估日志、core、临时文件、WAL、CPU 或连接名额放大。
  • 把服务器能启动或查询能完成误当作数据与行为正确的证明。

演化历史

相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。

  1. PostgreSQL 8.2 ← 8.1 新增此参数

    PostgreSQL 8.2 起可用

逐版本快照

每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。

版本 默认值单位上下文类型最小值最大值枚举值
8.2 — — — 布尔 — — —
8.3 — — — 布尔 — — —
8.4 — — — 布尔 — — —
9.0 off — 连接时 布尔 — — —
9.1 off — 连接时 布尔 — — —
9.2 off — 连接时 布尔 — — —
9.3 off — 连接时 布尔 — — —
9.4 off — 连接时 布尔 — — —
9.5 off — 连接时 布尔 — — —
9.6 off — 连接时 布尔 — — —
10 off — 连接时 布尔 — — —
11 off — 连接时 布尔 — — —
12 off — 连接时 布尔 — — —
13 off — 连接时 布尔 — — —
14 off — 连接时 布尔 — — —
15 off — 连接时 布尔 — — —
16 off — 连接时 布尔 — — —
17 off — 连接时 布尔 — — —
18 off — 连接时 布尔 — — —
19 off — 连接时 布尔 — — —
20 — — — 布尔 — — —

参考资料

同类参数

参数 类型 上下文 默认值 版本变动 最近变更
Developer Options 开发者选项 40 个 ↗
composite_type_mismatch 枚举 会话(超级用户) error —
设置如何处理复合类型数据的版本不匹配。 现存
allow_in_place_tablespaces 布尔 会话(超级用户) off —
当向 CREATE TABLESPACE 命令提供空的位置字符串时,允许将表空间创建为 pg_tblspc 内的目录。 现存
allow_system_table_mods 布尔 会话(超级用户) off 131 次
允许修改系统表的结构以及对系统表进行某些其他风险操作。 现存
backtrace_functions 字符串 会话(超级用户) 空字符串 —
这个参数包含一个以逗号分隔的 C 函数名称列表。 现存
debug_copy_parse_plan_trees 布尔 — —
启用该选项会强制所有解析树和计划树都经过 copyObject() 处理,以便更容易发现 copyObject() 中的错误和遗漏。 现存
debug_deadlocks 布尔 — —
如果设置,当死锁超时发生时,转储所有当前锁的信息。 现存
debug_discard_caches 整数 会话(超级用户) 0 —
当设置为 1 时,每个系统目录缓存条目都会在最早可能的时刻被置为无效,无论是否真的发生了使其失效的事件。 现存
debug_io_direct 字符串 重启生效 空字符串 —
要求内核使用 O_DIRECT(大多数类 Unix 系统)、F_NOCACHE(macOS)或 FILE_FLAG_NO_BUFFERING(Windows),尽量减小关系数据和 WAL 文件缓存的影响。 现存
debug_logical_replication_streaming 枚举 会话 buffered —
允许值为 buffered 和 immediate。 现存
debug_parallel_query 枚举 会话 off —
允许出于测试目的使用并行查询,即使预计不会带来性能收益也是如此。 现存
debug_raw_expression_coverage_test 布尔 — —
启用该选项会强制所有 DML 语句的原始解析树都经过 raw_expression_tree_walker() 扫描,以便更容易发现该函数中的错误和遗漏。 现存
debug_shared_buffers 整数 — —
缓冲区空闲列表报告之间的秒数。 于 8.1 移除
debug_write_read_parse_plan_trees 布尔 — —
启用该选项会强制所有解析树和计划树都经过 outfuncs.c/readfuncs.c 处理,以便更容易发现这些模块中的错误和遗漏。 现存
force_parallel_mode 枚举 会话 off —
允许为测试目的使用并行查询,即使预期不会带来性能收益。 于 16 移除
ignore_checksum_failure 布尔 会话(超级用户) off —
只有启用数据校验和时才有效。 现存
ignore_invalid_pages 布尔 重启生效 off —
如果设置为 off(默认值),则在恢复期间检测到引用无效页面的 WAL 记录会导致 PostgreSQL 引发 PANIC 级别错误,中止恢复。 现存
ignore_system_indexes 布尔 连接时 off —
读取系统表时忽略系统索引(但是修改系统表时依然同时更新索引)。 现存
jit_debugging_support 布尔 连接时(超级用户) off —
如果 LLVM 具有所需的功能,则向 GDB 注册生成的函数。 现存
jit_dump_bitcode 布尔 会话(超级用户) off —
将生成的 LLVM IR 写入文件系统,位于 data_directory 内。 现存
jit_expressions 布尔 会话 on —
当 JIT 编译被激活时(见第 30.2 节),确定表达式是否用 JIT 编译。 现存
jit_profiling_support 布尔 连接时(超级用户) off —
如果 LLVM 具有所需的功能,则输出让 perf 对 JIT 生成的函数进行性能分析所需的数据。 现存
jit_tuple_deforming 布尔 会话 on —
当 JIT 编译被激活时(见第 30.2 节),确定元组拆解是否被 JIT 编译。 现存
log_btree_build_stats 布尔 — —
如果设置,会记录 B-树操作上的系统资源使用情况统计(内存和 CPU)。 现存
post_auth_delay 整数 连接时 0 s —
新服务器进程启动并完成认证过程之后的延迟时间。 现存
pre_auth_delay 整数 重载生效 0 s —
新服务器进程刚刚派生之后、执行认证过程之前的延迟时间。 现存
remove_temp_files_after_crash 布尔 重载生效 on —
当设置为 on(默认值)时,PostgreSQL 将在后端崩溃后自动删除临时文件。 现存
send_abort_for_crash 布尔 重载生效 off —
默认情况下,后端崩溃后,postmaster 会向其余子进程发送 SIGQUIT 信号使其停止,这样它们可以较为平稳地退出。 现存
send_abort_for_kill 布尔 重载生效 off —
默认情况下,在尝试用 SIGQUIT 停止子进程之后,postmaster 会等待五秒,然后发送 SIGKILL 强制立即终止。 现存
trace_connection_negotiation 布尔 重启生效 off —
记录认证开始前连接握手过程的详细信息。 现存
trace_lock_oidmin 整数 — 8.41 次
如果设置,不会跟踪 OID 小于此值的表上的锁(用于避免在系统表上的输出)。 现存
trace_lock_table 整数 — 8.41 次
无条件地跟踪此表(OID)上的锁。 现存
trace_locks 布尔 — —
如果开启,发出锁使用情况的信息。 现存
trace_lwlocks 布尔 — —
如果开启,发出轻量级锁的使用信息。 现存
trace_notify 布尔 会话 off —
为 LISTEN 和 NOTIFY 命令生成大量调试输出。 现存
trace_recovery_messages 枚举 重载生效 log —
启用原本不会记录的恢复相关调试输出。 于 17 移除
trace_sort 布尔 会话 off —
如果开启,输出排序操作中的资源使用信息。 现存
trace_userlocks 布尔 — —
如果开启,发出关于用户锁使用的信息。 现存
wal_consistency_checking 字符串 会话(超级用户) 空字符串 —
这个参数被设计用来检查 WAL 重做例程中的缺陷。 现存
wal_debug 布尔 — 8.01 次
如果被打开,WAL 相关的调试输出将被发出。 现存
zero_damaged_pages 布尔 会话(超级用户) off —
检测到损坏的页面头通常会导致 PostgreSQL 报告错误,中止当前事务。 现存