ALTER INDEX — 更改索引的定义
ALTER INDEX [ IF EXISTS ]nameRENAME TOnew_nameALTER INDEX [ IF EXISTS ]nameSET TABLESPACEtablespace_nameALTER INDEXnameATTACH PARTITIONindex_nameALTER INDEXname[ NO ] DEPENDS ON EXTENSIONextension_nameALTER INDEX [ IF EXISTS ]nameSET (storage_parameter[=value] [, ... ] ) ALTER INDEX [ IF EXISTS ]nameRESET (storage_parameter[, ... ] ) ALTER INDEX [ IF EXISTS ]nameALTER [ COLUMN ]column_numberSET STATISTICSintegerALTER INDEX ALL IN TABLESPACEname[ OWNED BYrole_name[, ... ] ] SET TABLESPACEnew_tablespace[ NOWAIT ]
ALTER INDEX 更改现有索引的定义。下面描述了几种子形式。注意,每种子形式所需的锁级别可能不同。除非另有说明,否则将持有 ACCESS EXCLUSIVE 锁。当列出多个子命令时,将持有所有子命令所需的最严格的锁。
RENAMERENAME 形式更改索引的名称。如果索引与表约束(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_nameNO 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 的扩展。
如果您在文档中发现任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用 此表单 来报告文档问题。