Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16

ALTER INDEX

名称

ALTER INDEX -- 更改一个索引的定义

大纲

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

RENAME形式更改该索引的名称。对存储的数据没有影响。

SET TABLESPACE

这种形式更改该索引的表空间为指定的表空间, 并且把与该索引相关联的数据文件移动到新的表空间中。要更改一个索引的表空间, 你必须拥有该索引并且具有新表空间上的CREATE权限。 可以使用ALL IN TABLESPACE 形式把当前数据库中在一个表空间内的所有索引全部移动到另一个表空间中, 这将会锁定所有要被移动的索引然后挨个移动它们。这种形式也支持 OWNED BY,即只移动属于指定角色的索引。如果指定了 NOWAIT选项,那么当该命令无法立刻获得所有锁时将会失败。 注意这个命令不会移动系统目录,如果想要移动系统目录,应使用 ALTER DATABASE或者显式的ALTER INDEX调用。 另见CREATE TABLESPACE

SET ( storage_parameter = value [, ... ] )

这种形式为该索引更改一个或者多个索引方法相关的存储参数。可用的参数详见 CREATE INDEX。注意这个命令不会立刻修改索引内容, 根据参数你可能需要用REINDEX重建索引来得到想要的效果。

RESET ( storage_parameter [, ... ] )

这种形式把一个或者多个索引方法相关的存储参数重置为其默认值。正如 SET一样,可能需要一次REINDEX来完全更新该索引。

参数

IF EXISTS

该索引不存在时不要抛出一个错误。这种情况下发出一个提示。

name

要更改的一个现有索引的名称(可能被模式限定)。

new_name

该索引的新名称。

tablespace_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;

兼容性

ALTER INDEX是一种 PostgreSQL扩展。

另见

CREATE INDEX, REINDEX