ALTER INDEX — 更改索引的定义
ALTER INDEX [ IF EXISTS ]nameRENAME TOnew_nameALTER INDEX [ IF EXISTS ]nameSET TABLESPACEtablespace_nameALTER INDEXnameDEPENDS ON EXTENSIONextension_nameALTER INDEX [ IF EXISTS ]nameSET (storage_parameter[=value] [, ... ] ) ALTER INDEX [ IF EXISTS ]nameRESET (storage_parameter[, ... ] ) ALTER INDEX ALL IN TABLESPACEname[ OWNED BYrole_name[, ... ] ] SET TABLESPACEnew_tablespace[ NOWAIT ]
ALTER INDEX更改现有索引的定义。有几种子形式:
RENAMERENAME形式更改索引的名称。存储的数据不受影响。
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变体,但现在会被忽略 (同时发出警告)。索引的拥有者不能不同于其所属表的拥有者。更改表的拥有者时, 索引的拥有者也会自动更改。
不允许更改系统目录索引的任何部分。
要重命名现有索引:
ALTER INDEX distributors RENAME TO suppliers;
要将索引移到另一个表空间:
ALTER INDEX distributors SET TABLESPACE fasttablespace;
要更改索引的填充因子(假设该索引方法支持fillfactor参数):
ALTER INDEX distributors SET (fillfactor = 75); REINDEX INDEX distributors;
ALTER INDEX是一种 PostgreSQL扩展。