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