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 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锁被持有。 列出多个子命令时,锁的持有将是任何子命令所需的最严格的子命令。
RENAMERENAME形式更改该索引的名称。如果索引与一个表约束(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_nameNO DEPENDS ON EXTENSION extension_name这种形式将索引标记为依赖于扩展,或者如果指定了 NO,则不再依赖于该扩展名。标记为依赖于扩展名的索引会在删除扩展名时自动删除。
SET ( storage_parameter[= value] [, ... ] )这种形式为该索引更改一个或者多个索引方法相关的存储参数。可用的参数详见 CREATE INDEX。注意这个命令不会立刻修改索引内容, 根据参数你可能需要用REINDEX重建索引来得到想要的 效果。
RESET ( storage_parameter[, ... ] )这种形式把一个或者多个索引方法相关的存储参数重置为其默认值。正如 SET一样,可能需要一次REINDEX来完全更新 该索引。
ALTER [ COLUMN ] column_numberSET 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;
更改一个索引的填充因子(假设该索引方法支持填充因子):
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
备案信息: 粤ICP备15087711号-2
Copyright © 2008-2024 啊嘎哇在线工具箱 All Rights.
本站所有资料来源于网络,版权归原作者所有,仅作学习交流使用,如不慎侵犯了您的权利,请联系我们。