支持的版本: 当前 (17) / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0

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 扩展。

提交更正

如果您发现文档中的任何内容不正确、与您使用特定功能的体验不符或需要进一步澄清,请使用此表单报告文档问题。