ALTER INDEX
大纲
ALTER INDEX [ IF EXISTS ] name RENAME TO new_name ALTER INDEX [ IF EXISTS ] name SET TABLESPACE tablespace_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 ALL IN TABLESPACE name [ OWNED BY role_name [, ... ] ] SET TABLESPACE new_tablespace [ NOWAIT ]
描述
ALTER INDEX更改一个现有索引的定义。 它有几种形式:
- RENAME
-
RENAME形式更改该索引的名称。这对已存储的数据没有 影响。
- SET TABLESPACE
-
这种形式更改该索引的表空间为指定的表空间,并且把与该索引相关联的数据文件 移动到新的表空间中。要更改一个索引的表空间,你必须拥有该索引并且具有新表 空间上的CREATE特权。可以使用 ALL IN TABLESPACE形式把当前数据库中在一个表空间内的 所有索引全部移动到另一个表空间中,这将会锁定所有要被移动的索引然后挨个移 动它们。这种形式也支持OWNED BY,即只移动属于指定角色 的索引。如果指定了NOWAIT选项,那么当该命令无法立刻获 得所有锁时将会失败。注意这个命令不会移动系统目录,如果想要移动系统目录, 应使用ALTER DATABASE或者显式的 ALTER INDEX调用。另见 CREATE TABLESPACE。
- DEPENDS ON EXTENSION
-
这种形式把该索引标记为依赖于扩展,这样如果该扩展被删除,该索引也将被 自动删除。
- SET ( storage_parameter = value [, ... ] )
-
这种形式为该索引更改一个或者多个索引方法相关的存储参数。可用的参数详见 CREATE INDEX。注意这个命令不会立刻修改索引内容, 根据参数你可能需要用REINDEX重建索引来得到想要的 效果。
- RESET ( storage_parameter [, ... ] )
-
这种形式把一个或者多个索引方法相关的存储参数重置为其默认值。正如 SET一样,可能需要一次REINDEX来完全更新 该索引。
参数
- IF EXISTS
-
如果该索引不存在不要抛出错误。这种情况下将发出一个提示。
- name
-
要更改的一个现有索引的名称(可能被模式限定)。
- new_name
-
该索引的新名称。
- tablespace_name
-
该索引将被移动到的表空间。
- extension_name
-
该索引所依赖的扩展的名称。
- storage_parameter
-
一个索引方法相关的存储参数的名称。
- value
-
一个索引方法相关的存储参数的新值。根据该参数,这可能是一个数字或者一个 词。
注解
也可以用ALTER TABLE来做这些操作。实际上, ALTER INDEX只是ALTER TABLE应用在索引 上的形式的别名而已。
以前有一种ALTER INDEX OWNER变体,但现在已被忽略(会出现 一个警告)。一个索引的拥有者不能与其基表的拥有者不同。更改基表的拥有者 会自动地更改索引的拥有者。
不允许更改系统目录索引的任何部分。