2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 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

使命名的索引(可能帶有模式限定)附加到被修改的索引。命名的索引必須位於正在修改的索引所在表的某個分割槽上,並且具有等效的定義。附加的索引不能單獨刪除,如果其父索引被刪除,它也將被自動刪除。

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

要修改的現有索引的名稱(可能帶有模式限定)。

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 的擴充套件。

另請參閱

CREATE INDEX, REINDEX

提交更正

如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表單 來報告文件問題。