Postgresql 中文操作指南
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 形式会更改索引的名称。如果索引与表约束( UNIQUE 、 PRIMARY KEY 或 EXCLUDE )关联,则该约束也将被重命名。不会对存储的数据产生影响。
-
重命名索引会获取 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;