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

ALTER INDEX

ALTER INDEX — 更改索引的定义

概要

ALTER INDEX [ IF EXISTS ] name RENAME TO new_name
ALTER INDEX [ IF EXISTS ] name SET TABLESPACE tablespace_name
ALTER INDEX name ATTACH PARTITION index_name
ALTER INDEX name [ NO ] DEPENDS ON EXTENSION extension_name
ALTER INDEX [ IF EXISTS ] name SET ( storage_parameter [= value] [, ... ] )
ALTER INDEX [ IF EXISTS ] name RESET ( storage_parameter [, ... ] )
ALTER INDEX [ IF EXISTS ] name ALTER [ COLUMN ] column_number
    SET STATISTICS integer
ALTER INDEX ALL IN TABLESPACE name [ OWNED BY role_name [, ... ] ]
    SET TABLESPACE new_tablespace [ NOWAIT ]

描述

ALTER INDEX 会更改现有索引的定义。下面介绍了若干子形式。请注意,每个子形式需要的锁定级别可能不同。除非明确指出,否则将持有 ACCESS EXCLUSIVE 锁。如果列出了多个子命令,则将持有从任何子命令中要求的最严格的锁。

RENAME

RENAME 表格会更改索引名称。如果索引与表格约束相关联(UNIQUEPRIMARY KEYEXCLUDE),该约束也会被重命名。对存储的数据没有影响。

重命名索引会获取 SHARE UPDATE EXCLUSIVE 锁。

SET TABLESPACE

此表格会将索引的表空间更改为指定的表空间并移动与索引关联的数据文件到新表空间。要更改索引的表空间,您必须拥有该索引并在新表空间上有 CREATE 权限。当前数据库中位于表空间中的所有索引都可以通过使用 ALL IN TABLESPACE 表格进行移动,此表格会锁定所有要移动的索引,然后将它们逐个移动。该表格还支持 OWNED BY,它只会移动指定角色所有的索引。如果指定了 NOWAIT 选项,那么如果该命令不能立即获取所需的所有锁,它会失败。请注意,系统目录不会通过此命令进行移动,如果需要,请改用 ALTER DATABASE 或显式调用 ALTER INDEX。另请参见 CREATE TABLESPACE

ATTACH PARTITION index_name

导致指定的索引(可能限定于模式)附加到已更改的索引。指定的索引必须位于包含正在更改索引的表格分区上,并且具有等效定义。附加索引不能单独删除,如果其父索引被删除,则会自动删除该索引。

DEPENDS ON EXTENSION extension_name
NO DEPENDS ON EXTENSION extension_name

此表格将索引标记为依赖扩展名,如果指定了 NO,则不在依赖扩展名。当扩展名被删除时,标记为依赖扩展名的索引会自动删除。

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

此表格更改索引的一个或多个索引方法特定存储参数。有关可用参数的详细信息,请参阅 CREATE INDEX。请注意,此命令不会立即修改索引内容;根据参数,您可能需要使用 REINDEX 重建索引以获得所需的效果。

RESET ( storage_parameter [, ... ] )

此表单将一个或多个索引方法特定的存储参数重置为其默认值。与 SET 一样,可能需要 REINDEX 来完全更新该索引。

ALTER [ COLUMN ] column_number SET STATISTICS integer

此表单为后续的 ANALYZE 操作设置每列统计信息收集目标,尽管只能用于定义为表达式的索引列。由于表达式没有唯一的名称,因此我们使用索引列的序号对其进行引用。目标可以在 0 到 10000 的范围内设置;或者,将其设置为 -1 以恢复使用系统默认统计信息目标 (default_statistics_target)。有关 PostgreSQL 查询计划程序对统计信息的使用,请参阅 第 14.2 节

参数

IF EXISTS

如果索引不存在,不要抛出错误。在这种情况下,将发出一个通知。

column_number

序号是指索引列的顺序(从左到右)位置。

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;

更改索引的填充因子(假设索引方法支持该因子)

ALTER INDEX distributors SET (fillfactor = 75);
REINDEX INDEX distributors;

设置表达式索引的统计信息收集目标

CREATE INDEX coord_idx ON measured (x, y, (z + t));
ALTER INDEX coord_idx ALTER COLUMN 3 SET STATISTICS 1000;

兼容性

ALTER INDEXPostgreSQL 扩展。

另请参阅

CREATE INDEXREINDEX