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变种,但是现在忽略了(带一个警告)。 一个索引不能有一个和其表的属主不同的所有者。改变该表的所有者将自动改变索引的所有者。
不允许修改系统表索引的任何部分。