Man page - reindex(7)
Manual
REINDEX
NAMESYNOPSIS
DESCRIPTION 描 述
PARAMETERS 参 数
NOTES 注 意
EXAMPLES 例 子
COMPATIBILITY 兼 容 性
译 者
跋
NAME
REINDEX - 重 建 索 引
SYNOPSIS
REINDEX { DATABASE | TABLE | INDEX } name [ FORCE ]
DESCRIPTION 描 述
REINDEX 基 于 存 储 在 表 上 的 数 据 重 建 索 引 , 替 换 旧 的 索 引 拷 贝 。 使 用 REINDEX 有 两 个 主 要 原 因 :
|
• |
索 引 崩 溃 , 并 且 不 再 包 含 有 效 的 数 据 。 尽 管 理 论 上 这 是 不 可 能 发 生 的 , 但 实 际 上 索 引 会 因 为 软 件 毛 病 或 者 硬 件 问 题 而 崩 溃 。 REINDEX 提 供 了 一 个 恢 复 方 法 。
|
• |
要 处 理 的 索 引 包 含 大 量 无 用 的 索 引 页 未 被 回 收 。 在 某 些 情 况 下 , 这 个 问 题 会 发 生 在 PostgreSQL 里 面 的 B-树 索 引 上 。 REINDEX 提 供 了 一 个 缩 小 索 引 空 间 消 耗 的 方 法 , 它 采 用 的 方 法 是 写 一 个 不 带 无 用 索 引 页 的 新 版 本 的 索 引 。 参 阅 Section 21.2 ‘‘Routine Indexing’’ 获 取 更 多 信 息 。 |
PARAMETERS 参 数
DATABASE
恢 复 一 个 声 明 了 的 数 据 库 的 所 有 系 统 索 引 。 不 包 含 用 户 表 上 的 索 引 。 同 样 , 除 非 在 独 立 运 行 模 式 下 , 也 会 忽 略 在 共 享 系 统 表 上 的 索 引 ( 见 下 文 ) 。
|
TABLE |
重 新 建 立 声 明 的 表 的 所 有 索 引 。 如 果 表 有 个 从 属 的 "TOAST"表 , 那 么 这 个 表 也 会 重 新 索 引 。
|
INDEX |
重 新 建 立 声 明 了 的 索 引 。
|
name |
要 重 建 的 所 声 明 的 数 据 库 /表 /索 引 的 名 称 。 表 和 索 引 名 可 以 有 模 式 修 饰 。
|
FORCE |
这 是 一 个 废 弃 的 选 项 , 如 果 声 明 , 会 被 忽 略 。
NOTES 注 意
如 果 你 怀 疑 一 个 用 户 表 上 的 索 引 崩 溃 了 , 你 可 以 简 单 地 重 建 该 索 引 , 或 者 该 表 上 地 所 有 索 引 , 使 用 REINDEX INDEX 或 者 REINDEX TABLE。 另 外 一 个 对 付 用 户 表 索 引 崩 溃 的 方 法 时 删 除 然 后 重 建 它 。 如 果 你 还 要 在 表 上 进 行 一 些 维 护 动 作 , 可 能 这 么 做 更 好 一 些 。 REINDEX 在 表 上 请 求 排 他 锁 , 而 CREATE INDEX 只 是 锁 住 写 动 作 , 而 不 会 锁 住 读 。
如 果 你 从 一 个 崩 溃 的 系 统 表 索 引 上 恢 复 , 事 情 会 更 棘 手 一 些 。 这 种 情 况 下 , 系 统 必 须 不 能 使 用 任 何 有 疑 问 的 索 引 。 ( 实 际 上 , 在 这 种 情 况 下 , 你 可 能 发 现 服 务 器 进 程 在 启 动 之 后 马 上 就 崩 溃 了 , 因 为 依 赖 于 崩 溃 了 的 索 引 。 ) 要 想 安 全 恢 复 , 服 务 器 必 须 带 着 -P 选 项 启 动 , 它 禁 止 服 务 器 在 查 找 系 统 表 的 时 候 使 用 索 引 。
这 么 做 个 一 个 办 法 事 停 止 postmaster 然 后 带 着 -P 命 令 行 选 项 启 动 一 个 独 立 的 PostgreSQL 服 务 器 。 然 后 , 根 据 你 希 望 恢 复 的 程 度 , 可 以 发 出 REINDEX DATABASE, REINDEX TABLE, 或 者 REINDEX INDEX。 如 果 还 有 怀 疑 , 使 用 REINDEX DATABASE 选 择 重 新 构 造 数 据 库 中 全 部 的 系 统 索 引 。 然 后 退 出 独 立 服 务 器 会 话 并 且 重 启 普 通 的 服 务 器 。 参 阅 postgres (1) 手 册 页 获 取 有 关 如 何 与 独 立 服 务 器 交 互 的 信 息 。
另 外 , 一 个 普 通 的 会 话 可 以 在 其 命 令 行 选 项 里 带 着 -P 启 动 。 这 么 做 的 方 法 因 不 同 的 客 户 端 而 异 , 但 是 在 所 有 基 于 libpq 的 客 户 端 上 , 我 们 都 可 以 通 过 在 启 动 客 户 端 之 前 设 置 PGOPTIONS 环 境 变 量 为 -P 来 实 现 。 请 注 意 尽 管 这 个 方 法 并 不 要 求 锁 住 其 它 客 户 端 , 但 是 禁 止 其 它 客 户 端 连 接 受 损 的 数 据 库 , 直 到 完 成 修 补 应 该 事 一 个 明 智 的 选 择 。
如 果 怀 疑 任 何 共 享 的 系 统 表 的 索 引 损 坏 ( (pg_database, pg_group, 或 者 pg_shadow) , 那 么 必 须 用 独 立 服 务 器 的 方 式 来 修 复 它 。 REINDEX 不 能 在 多 用 户 环 境 下 处 理 共 享 系 统 表 。
除 了 共 享 系 统 表 之 外 的 所 有 索 引 , REINDEX 是 抗 崩 溃 并 且 是 事 务 安 全 的 。 REINDEX 对 于 共 享 的 索 引 而 言 不 是 抗 崩 溃 的 , 这 就 是 为 什 么 不 允 许 在 正 常 操 作 中 这 么 使 用 的 原 因 。 如 果 在 重 新 对 一 个 共 享 表 进 行 索 引 的 时 候 发 生 了 崩 溃 , 那 么 在 纠 正 问 题 之 前 , 就 不 可 能 重 新 启 动 普 通 的 服 务 器 。 ( 一 个 建 立 了 一 部 分 的 共 享 索 引 的 典 型 症 状 是 "index is not a btree/索 引 不 是 btree 索 引 "错 误 。 )
在 PostgreSQL 7.4 之 前 , REINDEX TABLE 并 不 自 动 处 理 TOAST 表 , 因 此 这 些 表 必 须 用 独 立 的 命 令 进 行 处 理 。 这 么 做 仍 然 可 以 , 但 是 已 经 多 余 了 。
EXAMPLES 例 子
重 建 表 mytable 上 的 索 引 :
REINDEX TABLE my_table;
重 建 单 个 索 引 :
REINDEX INDEX my_index;
重 建 一 个 数 据 库 上 的 所 有 系 统 索 引 , 不 管 他 们 是 否 有 效 :
$
export
PGOPTIONS="-P"
$
psql broken_db
broken_db=> REINDEX DATABASE broken_db;
broken_db=> \q
COMPATIBILITY 兼 容 性
在 SQL 标 准 里 没 有 REINDEX。
译 者
Postgresql 中 文 网 站 何 伟 平 <laser@pgsqldb.org>
跋
本
页 面 中 文 版 由
中 文 man 手 册 页 计
划 提 供 。
中 文 man 手 册 页 计
划 :
https://github.com/man-pages-zh/manpages-zh