↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

Wiki / SQL 命令

ALTER INDEX

更改索引的定义

英文手册覆盖始于 PostgreSQL 6.4. 来源历史与运行验证各自保留独立版本边界。

当前阅读 PG 18·选择有来源记录的版本

anchor
SQL-ALTERINDEX
file
sql-alterindex.html
lang
en
name
ALTER INDEX
purpose
change the definition of an index
purpose zh
未知
sections same as
未知
slug
18

语法

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 IF EXISTS name RENAME TO new_name
ALTER INDEX · 语法 2
ALTER INDEX IF EXISTS name SET TABLESPACE tablespace_name
ALTER INDEX · 语法 3
ALTER INDEX name ATTACH PARTITION index_name
ALTER INDEX · 语法 4
ALTER INDEX name NO DEPENDS ON EXTENSION extension_name
ALTER INDEX · 语法 5
ALTER INDEX IF EXISTS name SET ( storage_parameter = value , )
ALTER INDEX · 语法 6
ALTER INDEX IF EXISTS name RESET ( storage_parameter , )
ALTER INDEX · 语法 7
ALTER INDEX IF EXISTS name ALTER COLUMN column_number SET STATISTICS integer
ALTER INDEX · 语法 8
ALTER INDEX ALL IN TABLESPACE name OWNED BY role_name , SET TABLESPACE new_tablespace NOWAIT

版本定义 PG 18

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形式更改该索引的名称。如果该索引与某个表约束(即 UNIQUE、PRIMARY KEY或 EXCLUDE)相关联,该约束也会一并重命名。这不会影响已存储的数据。

重命名索引会获取一个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;

要更改索引的填充因子(假设该索引方法支持fillfactor参数):

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 INDEX是一种 PostgreSQL扩展。

另见

CREATE INDEX, REINDEX

比较版本

完整来源事实

synopsis html

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

synopsis text

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 ]

来源引用

完整定义与证据 JSON

定义来源

center · PostgreSQL 18 · a709ab85

正文语言: zh-Hans · 1b5ca64c