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 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更改现有索引的定义。有几个子窗体:

  • RENAME

    • RENAME表单更改索引的名称。如果索引与表约束(UNIQUEPRIMARY KEYEXCLUDE)相关联,则约束也将重命名。对存储的数据没有影响。
  • SET TABLESPACE

    • 这种形式将索引的表空间更改为指定的表空间,并将与索引关联的数据文件移动到新的表空间。要更改索引的表空间,您必须拥有索引并在新表空间上具有CREATE特权。可以使用ALL IN TABLESPACE格式移动表空间中当前数据库中的所有索引,该格式将锁定要移动的所有索引,然后再移动每个索引。此表单还支持OWNED BY,它将仅移动指定角色所拥有的索引。如果指定了NOWAIT选项,则如果该命令无法立即获取所有必需的锁,则该命令将失败。请注意,此命令不会移动系统目录,请根据需要使用ALTER DATABASE或显式ALTER INDEX调用。另请参见CREATE TABLESPACE
  • ATTACH PARTITION

    • 使命名索引附加到更改的索引。命名索引必须位于包含要更改的索引的表的分区上,并且具有等效的定义。附加索引不能自己删除,如果删除了其父索引,它将自动删除。
  • DEPENDS ON EXTENSION

    • 这种形式将索引标记为依赖于 extensions,这样,如果删除 extensions,索引也将自动删除。
  • 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

    • 索引所依赖的 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;

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

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

CREATE INDEX, REINDEX