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
表单更改索引的名称。如果索引与表约束相关联(UNIQUE
、PRIMARY KEY
或EXCLUDE
),则约束也会被重命名。对存储的数据没有影响。重命名索引会获得
SHARE UPDATE EXCLUSIVE
锁定。SET TABLESPACE
此表单将索引的表空间更改为指定的表空间,并将与索引关联的数据文件移动到新表空间。要更改索引的表空间,您必须拥有该索引,并且对新表空间具有
CREATE
权限。可以使用ALL IN TABLESPACE
表单移动当前数据库中表空间中的所有索引,该表单将锁定所有要移动的索引,然后移动每个索引。此表单还支持OWNED BY
,它将仅移动由指定角色拥有的索引。如果指定了NOWAIT
选项,那么如果命令无法立即获取所有必需的锁,则该命令将失败。请注意,此命令不会移动系统目录,如果需要,请改用ALTER DATABASE
或显式ALTER INDEX
调用。另请参见CREATE TABLESPACE
。ATTACH PARTITION
导致命名的索引附加到已更改的索引。命名的索引必须位于包含正在更改的索引的表的某个分区上,并且具有等效的定义。附加索引不能自行删除,并且如果其父索引被删除,它将自动被删除。
DEPENDS ON EXTENSION
extension_name
NO DEPENDS ON EXTENSION
extension_name
此表单将索引标记为依赖于扩展,或者如果指定了
NO
,则不再依赖于该扩展。当扩展被删除时,标记为依赖于该扩展的索引将自动被删除。SET (
storage_parameter
[=value
] [, ... ] )此表单更改索引的一个或多个索引方法特定存储参数。有关可用参数的详细信息,请参阅
CREATE INDEX
。请注意,此命令不会立即修改索引内容;根据参数,您可能需要使用REINDEX
重新构建索引才能获得所需的效果。重置(
存储参数
[,... ])此形式将一个或多个索引方法特定存储参数重置为其默认值。与
SET
一样,可能需要REINDEX
来完全更新索引。ALTER [ COLUMN ]
列号
SET STATISTICS整数
此形式设置后续
ANALYZE
操作的每列统计信息收集目标,但只能用于定义为表达式的索引列。由于表达式没有唯一名称,因此我们使用索引列的序数来引用它们。目标可以设置为 0 到 10000 范围内的值;或者,将其设置为 -1 以恢复使用系统默认统计信息目标(default_statistics_target)。有关 PostgreSQL 查询计划程序使用统计信息的详细信息,请参阅 第 14.2 节。
参数
IF EXISTS
如果索引不存在,则不抛出错误。在这种情况下,会发出通知。
列号
序数是指索引列的序数(从左到右)位置。
名称
要更改的现有索引的名称(可能包含模式限定)。
新名称
索引的新名称。
表空间名称
索引将被移动到的表空间。
扩展名
索引要依赖的扩展名。
存储参数
索引方法特定存储参数的名称。
值
索引方法特定存储参数的新值。这可能是数字或单词,具体取决于参数。
备注
还可以使用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扩展。