# 更改索引
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 ]
# 描述
更改索引
更改现有索引的定义。下面描述了几个子窗体。请注意,每个子表单所需的锁定级别可能不同。一个访问独家
除非明确说明,否则将保持锁定。当列出多个子命令时,所持有的锁将是任何子命令中要求的最严格的锁。
改名
这改名
form 更改索引的名称。如果索引与表约束相关联(要么独特
,首要的关键
, 要么排除
),约束也被重命名。对存储的数据没有影响。
重命名索引会获得一个共享更新独家
锁。
设置表空间
这种形式将索引的表空间更改为指定的表空间,并将与索引关联的数据文件移动到新的表空间。要更改索引的表空间,您必须拥有该索引并拥有创建
新表空间的特权。表空间中当前数据库中的所有索引都可以通过使用全部在表空间中
表单,它将锁定所有要移动的索引,然后移动每个索引。这种形式还支持拥有者
,这只会移动指定角色拥有的索引。如果现在等待
如果指定了选项,则如果无法立即获取所需的所有锁,该命令将失败。请注意,此命令不会移动系统目录,请使用更改数据库
或明确的更改索引
如果需要,可以调用。也可以看看创建表空间
.
附加分区
使命名索引附加到更改的索引。命名索引必须位于包含被更改索引的表的分区上,并且具有等效定义。附加索引不能自行删除,如果其父索引被删除,将自动删除。
取决于扩展 *
扩展名*
不依赖于扩展 *
扩展名*
这种形式将索引标记为依赖于扩展,或者不再依赖于该扩展,如果不
被指定。删除扩展时会自动删除标记为依赖于扩展的索引。
放 ( *
存储参数* [= *
价值*] [, ... ])
这种形式更改索引的一个或多个特定于索引方法的存储参数。看创建索引
有关可用参数的详细信息。注意该命令不会立即修改索引内容;根据您可能需要重建索引的参数重新索引
以获得想要的效果。
重启 ( *
存储参数* [, ... ] )
此表单将一个或多个特定于索引方法的存储参数重置为其默认值。与放
, 一种重新索引
可能需要完全更新索引。
更改 [ 列 ] *
列号* 设置统计 *
整数*
这种形式为后续的每列统计收集目标设置分析
操作,但只能用于定义为表达式的索引列。由于表达式缺少唯一的名称,我们使用索引列的序号来引用它们。目标可在 0 到 10000 范围内设置;或者,将其设置为 -1 以恢复使用系统默认统计目标 (默认_统计数据_目标)。有关 PostgreSQL 查询计划器使用统计信息的更多信息,请参阅第 14.2 节.
# 参数
如果存在
如果索引不存在,不要抛出错误。在这种情况下发出通知。
列号
序数是指索引列的序数(从左到右)位置。
姓名
要更改的现有索引的名称(可能是模式限定的)。
新名字
索引的新名称。
表空间名称
索引将被移动到的表空间。
扩展名
索引所依赖的扩展名。
存储参数
特定于索引方法的存储参数的名称。
价值
特定于索引方法的存储参数的新值。这可能是一个数字或一个单词,具体取决于参数。
# 笔记
这些操作也可以使用更改表
.更改索引
实际上只是形式的别名更改表
适用于索引。
以前有一个更改索引所有者
变体,但现在被忽略(带有警告)。索引的所有者不能与其表的所有者不同。更改表的所有者也会自动更改索引。
不允许更改系统目录索引的任何部分。
# 例子
要重命名现有索引:
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;
# 兼容性
更改索引
是一个 PostgreSQL 扩展。