On this page
ALTER INDEX
ALTER INDEX —更改索引的定义
Synopsis
ALTER INDEX [ IF EXISTS ] name RENAME TO new_name
ALTER INDEX [ IF EXISTS ] name SET TABLESPACE tablespace_name
ALTER INDEX name DEPENDS ON EXTENSION extension_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 ]
Description
ALTER INDEX
更改现有索引的定义。有几个子窗体:
RENAME
RENAME
表单更改索引的名称。对存储的数据没有影响。
SET TABLESPACE
- 这种形式将索引的表空间更改为指定的表空间,并将与索引关联的数据文件移动到新的表空间。要更改索引的表空间,您必须拥有索引并在新表空间上具有
CREATE
特权。可以使用ALL IN TABLESPACE
格式移动表空间中当前数据库中的所有索引,该格式将锁定要移动的所有索引,然后再移动每个索引。此表单还支持OWNED BY
,它将仅移动指定角色所拥有的索引。如果指定了NOWAIT
选项,则如果该命令无法立即获取所有必需的锁,则该命令将失败。请注意,此命令不会移动系统目录,请根据需要使用ALTER DATABASE
或显式ALTER INDEX
调用。另请参见CREATE TABLESPACE。
- 这种形式将索引的表空间更改为指定的表空间,并将与索引关联的数据文件移动到新的表空间。要更改索引的表空间,您必须拥有索引并在新表空间上具有
DEPENDS ON EXTENSION
- 这种形式将索引标记为依赖于 extensions,这样,如果删除 extensions,索引也将自动删除。
SET ( storage_parameter = value [, ... ] )
- 这种形式为索引更改一个或多个特定于索引方法的存储参数。有关可用参数的详细信息,请参见CREATE INDEX。请注意,此命令不会立即修改索引内容。根据参数,您可能需要使用REINDEX重建索引才能获得所需的效果。
RESET ( storage_parameter [, ... ] )
- 该表格将一个或多个特定于索引方法的存储参数重置为其默认值。与
SET
一样,可能需要REINDEX
才能完全更新索引。
- 该表格将一个或多个特定于索引方法的存储参数重置为其默认值。与
Parameters
IF EXISTS
- 如果索引不存在,请不要抛出错误。在这种情况下发出通知。
name
- 要更改的现有索引的名称(可能是架构限定)。
new_name
- 索引的新名称。
tablespace_name
- 索引将移动到的表空间。
extension_name
- 索引所依赖的 extensions。
storage_parameter
- 特定于索引方法的存储参数的名称。
value
- 特定于索引方法的存储参数的新值。根据参数,它可能是数字或单词。
Notes
使用ALTER TABLE也可以执行这些操作。 ALTER INDEX
实际上只是适用于索引的ALTER TABLE
形式的别名。
以前有一个ALTER INDEX OWNER
变体,但现在已忽略(带有警告)。索引的所有者不能与表的所有者不同。更改表的所有者也会自动更改索引。
不允许更改系统目录索引的任何部分。
Examples
重命名现有索引:
ALTER INDEX distributors RENAME TO suppliers;
要将索引移到其他表空间:
ALTER INDEX distributors SET TABLESPACE fasttablespace;
要更改索引的填充因子(假设 index 方法支持它):
ALTER INDEX distributors SET (fillfactor = 75);
REINDEX INDEX distributors;
Compatibility
ALTER INDEX
是 PostgreSQL 扩展。