支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0

ALTER INDEX

ALTER INDEX — 變更索引的定義

概要

ALTER INDEX [ IF EXISTS ] name RENAME TO new_name
ALTER INDEX [ IF EXISTS ] name SET TABLESPACE tablespace_name
ALTER INDEX name ATTACH PARTITION index_name
ALTER INDEX name [ NO ] DEPENDS ON EXTENSION extension_name
ALTER INDEX [ IF EXISTS ] name SET ( storage_parameter [= value] [, ... ] )
ALTER INDEX [ IF EXISTS ] name RESET ( storage_parameter [, ... ] )
ALTER INDEX [ IF EXISTS ] name ALTER [ COLUMN ] column_number
    SET STATISTICS integer
ALTER INDEX ALL IN TABLESPACE name [ OWNED BY role_name [, ... ] ]
    SET TABLESPACE new_tablespace [ NOWAIT ]

描述

ALTER INDEX 變更現有索引的定義。下面描述了幾種子形式。請注意,每種子形式所需的鎖定等級可能不同。除非明確註明,否則會持有 ACCESS EXCLUSIVE 鎖定。當列出多個子指令時,持有的鎖定將是任何子指令所需的最嚴格的鎖定。

RENAME

RENAME 形式會變更索引的名稱。如果索引與資料表約束(UNIQUEPRIMARY KEYEXCLUDE)相關聯,則約束也會重新命名。這對儲存的資料沒有影響。

重新命名索引會取得 SHARE UPDATE EXCLUSIVE 鎖定。

SET TABLESPACE

此形式將索引的資料表空間變更為指定的資料表空間,並將與索引相關聯的資料檔案移動到新的資料表空間。若要變更索引的資料表空間,您必須擁有該索引,並且對新的資料表空間具有 CREATE 權限。可以使用 ALL IN TABLESPACE 形式移動資料表空間中目前資料庫中的所有索引,這將鎖定要移動的所有索引,然後移動每個索引。此形式也支援 OWNED BY,它只會移動指定角色擁有的索引。如果指定了 NOWAIT 選項,則如果無法立即取得所有必需的鎖定,該指令將會失敗。請注意,系統目錄不會由此指令移動,如果需要,請改用 ALTER DATABASE 或明確的 ALTER INDEX 呼叫。另請參閱 CREATE TABLESPACE

ATTACH PARTITION index_name

導致指定的索引(可能具有 schema 限定詞)附加到變更後的索引。指定的索引必須位於包含要變更的索引的資料表的分割區上,並且具有相等的定義。附加的索引本身無法被刪除,如果其父索引被刪除,它將會自動被刪除。

DEPENDS ON EXTENSION extension_name
NO DEPENDS ON EXTENSION extension_name

此形式將索引標記為依賴於擴充功能,如果指定 NO,則不再依賴於該擴充功能。標記為依賴於擴充功能的索引會在擴充功能被刪除時自動刪除。

SET ( storage_parameter [= value] [, ... ] )

此形式變更索引的一個或多個索引方法特定的儲存參數。有關可用參數的詳細資訊,請參閱 CREATE INDEX。請注意,索引內容不會立即由此指令修改;根據參數,您可能需要使用 REINDEX 重建索引,才能獲得所需的效果。

RESET ( storage_parameter [, ... ] )

此形式將一個或多個索引方法特定的儲存參數重設為其預設值。與 SET 一樣,可能需要 REINDEX 才能完全更新索引。

ALTER [ COLUMN ] column_number SET STATISTICS integer

此形式設定後續 ANALYZE 作業的每個資料行統計資料收集目標,但只能用於定義為表達式的索引資料行。由於表達式缺少唯一的名稱,我們使用索引資料行的序數來引用它們。目標可以設定在 0 到 10000 的範圍內;或者,將其設定為 -1 以恢復為使用系統預設統計資料目標 (default_statistics_target)。有關 PostgreSQL 查詢規劃器使用統計資料的更多資訊,請參閱 第 14.2 節

參數

IF EXISTS

如果索引不存在,則不要擲回錯誤。在這種情況下,會發出通知。

column_number

序數是指索引資料行的序數(從左到右)位置。

name

要變更的現有索引的名稱(可能具有 schema 限定詞)。

new_name

索引的新名稱。

tablespace_name

索引將移動到的資料表空間。

extension_name

索引所依賴的擴充套件名稱。

storage_parameter

索引方法特定的儲存參數名稱。

value

索引方法特定的儲存參數的新值。這可能是一個數字或一個單字,取決於參數。

說明

這些操作也可以使用 ALTER TABLE 來完成。ALTER INDEX 實際上只是 ALTER TABLE 適用於索引之形式的別名。

先前有一個 ALTER INDEX OWNER 變體,但現在它已被忽略(並發出警告)。索引不能擁有與其表格擁有者不同的擁有者。變更表格的擁有者也會自動變更索引。

不允許變更系統目錄索引的任何部分。

範例

重新命名現有索引

ALTER INDEX distributors RENAME TO suppliers;

將索引移動到不同的表格空間

ALTER INDEX distributors SET TABLESPACE fasttablespace;

變更索引的填充因子(假設索引方法支援)

ALTER INDEX distributors SET (fillfactor = 75);
REINDEX INDEX distributors;

設定表達式索引的統計資訊收集目標

CREATE INDEX coord_idx ON measured (x, y, (z + t));
ALTER INDEX coord_idx ALTER COLUMN 3 SET STATISTICS 1000;

相容性

ALTER INDEXPostgreSQL 擴充功能。

提交更正

如果您在文件中看到任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單來報告文件問題。