ALTER INDEX — 更改索引的定義
ALTER INDEX [ IF EXISTS ]name
RENAME TOnew_name
ALTER INDEX [ IF EXISTS ]name
SET TABLESPACEtablespace_name
ALTER INDEXname
ATTACH PARTITIONindex_name
ALTER INDEXname
[ NO ] DEPENDS ON EXTENSIONextension_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 STATISTICSinteger
ALTER INDEX ALL IN TABLESPACEname
[ OWNED BYrole_name
[, ... ] ] SET TABLESPACEnew_tablespace
[ NOWAIT ]
ALTER INDEX
更改現有索引的定義。下面描述了幾種子形式。注意,每種子形式所需的鎖級別可能不同。除非另有說明,否則將持有 ACCESS EXCLUSIVE
鎖。當列出多個子命令時,將持有所有子命令所需的最嚴格的鎖。
RENAME
RENAME
形式更改索引的名稱。如果索引與表約束(UNIQUE
、PRIMARY KEY
或 EXCLUDE
)相關聯,則約束也會被重新命名。這對儲存的資料沒有影響。
重新命名索引會獲取一個 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 INDEX
是 PostgreSQL 的擴充套件。
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表單 來報告文件問題。