Man page - reindex(7)

Manual

REINDEX

NAME
SYNOPSIS
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