=========== ALTER INDEX =========== .. container:: refentry :name: SQL-ALTERINDEX .. container:: titlepage .. container:: refnamediv .. rubric:: ALTER INDEX :name: alter-index ALTER INDEX — 更改一个索引的定义 .. container:: refsynopsisdiv .. rubric:: 大纲 :name: 大纲 .. code:: synopsis ALTER INDEX [ IF EXISTS ] name RENAME TO new_name ALTER INDEX name DEPENDS ON EXTENSION extension_name .. container:: refsect1 :name: id-1.9.3.16.5 .. rubric:: 描述 :name: 描述 ``ALTER INDEX``\ 更改一个现有索引的定义。下面描述了几种子窗体。 注意每个子窗体所需的锁级别可能不同。除非显式说明,\ ``ACCESS EXCLUSIVE``\ 锁被持有。 列出多个子命令时,锁的持有将是任何子命令所需的最严格的子命令。 .. container:: variablelist ``RENAME`` ``RENAME``\ 形式更改该索引的名称。如果索引与一个表约束(\ ``UNIQUE``\ 、\ ``PRIMARY KEY``\ 或者\ ``EXCLUDE``\ )关联,该约束也会被重命名。这对已存储的数据没有影响。 重命名索引取得一个 ``SHARE UPDATE EXCLUSIVE``\ 锁。 ``DEPENDS ON EXTENSION`` 这种形式把该索引标记为依赖于扩展,这样如果该扩展被删除,该索引也将被 自动删除。 .. container:: refsect1 :name: id-1.9.3.16.6 .. rubric:: 参数 :name: 参数 .. container:: variablelist ``IF EXISTS`` 如果该索引不存在不要抛出错误。这种情况下将发出一个提示。 *``name``* 要更改的一个现有索引的名称(可能被模式限定)。 *``new_name``* 该索引的新名称。 *``extension_name``* 该索引所依赖的扩展的名称。 .. container:: refsect1 :name: id-1.9.3.16.7 .. rubric:: 注解 :name: 注解 也可以用\ `ALTER TABLE `__\ 来做这些操作。实际上, ``ALTER INDEX``\ 只是\ ``ALTER TABLE``\ 应用在索引 上的形式的别名而已。 以前有一种\ ``ALTER INDEX OWNER``\ 变体,但现在已被忽略(会出现 一个警告)。一个索引的拥有者不能与其基表的拥有者不同。更改基表的拥有者 会自动地更改索引的拥有者。 不允许更改系统目录索引的任何部分。 .. container:: refsect1 :name: id-1.9.3.16.8 .. rubric:: 示例 :name: 示例 要重命名一个现有索引: .. code:: programlisting ALTER INDEX distributors RENAME TO suppliers; .. container:: refsect1 :name: id-1.9.3.16.9 .. rubric:: 兼容性 :name: 兼容性 ``ALTER INDEX``\ 是一种 PostgreSQL扩展。 .. container:: refsect1 :name: id-1.9.3.16.10 .. rubric:: 另见 :name: 另见 `CREATE INDEX `__, `REINDEX `__