ALTER INDEX

PostgreSQL 9.4.4 中文手册
上一页 | 上一级 |  | 下一页

# 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` 改变一个现有索引的定义。 它有几种子形式：

`IF EXISTS`

  使用此选项，当索引不存在时不会抛出错误，只会有一个通知。

`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`来完全更新索引。

## 参数

`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

上一页 | 起始页 | 下一页
ALTER GROUP | 上一级 | ALTER LANGUAGE