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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM