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 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 更改现有索引的定义。有几个子表单:
RENAME
RENAME 表单更改索引的名称。如果索引与表约束( UNIQUE , PRIMARY KEY 或EXCLUDE )相关联,则也会重命名约束。对存储的数据没有影响。
SET TABLESPACE
此表单将索引的表空间更改为指定的表空间,并将与索引关联的数据文件移动到新的表空间。要更改索引的表空间,必须拥有索引并对新表空间具有CREATE 权限。可以使用 ALL IN TABLESPACE表单移动表空间中当前数据库中的所有索引,该表单将锁定要移动的所有索引,然后移动每个索引。此表单还支持OWNED BY ,它只会移动指定角色所拥有的索引。如果指定了 NOWAIT选项,则如果命令无法立即获取所需的所有锁,则该命令将失败。请注意,此命令不会移动系统目录,如果需要,请使用ALTER DATABASE 或显式 ALTER INDEX 调用。另见 CREATE TABLESPACE。
ATTACH PARTITION
使命名索引附加到已更改的索引。命名索引必须位于包含要更改的索引的表的分区上,并且具有等效定义。附加索引不能单独删除,如果删除其父索引,将自动删除。
DEPENDS ON EXTENSION
此表单将索引标记为依赖于扩展名,这样如果删除了扩展名,索引也将自动删除。
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)。
参数说明
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;