Postgresql 中文操作指南

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 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 ]

Description

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

    • 导致命名索引依附于已更改的索引。命名索引必须位于包含要更改的索引的表的某个分区上,并且具有等效的定义。附加索引无法自行删除,并且如果其父索引被删除,则它会自动被删除。

  • 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 查询计划程序使用统计信息详细信息,请参阅 Section 14.2

Parameters

  • IF EXISTS

    • 如果索引不存在,请不要抛出错误。这种情况下会发出通知。

  • column_number

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

  • name

    • 要更改的现有索引的名称(可以经过架构限定)。

  • new_name

    • 索引的新名称。

  • tablespace_name

    • 索引将被移至的表空间。

  • extension_name

    • 索引要依赖的扩展的名称。

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

若要更改索引的填充因子(假设索引方法支持它):

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;

Compatibility

ALTER INDEX 是一个 PostgreSQL 扩展。

See Also