REINDEX

Name

REINDEX  --  恢复一个损坏了的索引

Synopsis

REINDEX { DATABASE | TABLE | INDEX } name [ FORCE ]
  

输入

DATABASE

恢复一个声明了的数据库的所有系统索引. (不包括用户表的索引.)

TABLE

重新建立声明的表的所有索引.

INDEX

重新建立声明了的索引.

name

要重建的所声明的数据库/表/索引的名称. 表和索引名可以有模式修饰.

FORCE

强制性重建系统索引.如果没有这个关键字,REINDEX 忽略那些没有标记为非法的系统索引.FORCE 和 REINDEX INDEX 或者重新建立用户索引是不相关的.

输出

REINDEX

如果表的索引成功重建,返回此信息.

描述

REINDEX 用于重建损坏了的系统索引. 尽管理论上这种情况决不应该发声,但实际上索引可能因为软件臭虫 或者硬件失效而损坏.REINDEX 提供了一种恢复手段.

如果你怀疑一个索引在某用户表上崩溃了,那么你可以简单地重建 该索引,或者重建该表的所有索引,用 REINDEX INDEX 或者 REINDEX TABLE 命令.

注意: 另外一个处理崩溃了的用户表索引是删除然后重建它. 如果你同时还要维持一些在该表上表面的操作,那么这个方法可能更好. REINDEX 在表上施加排它的锁,而 CREATE INDEX 只锁住写,而不会限止对表的读取操作.

如果你想从一个系统表造成的崩溃中恢复,那么问题就更复杂一些. 在这种情况下,避免在做恢复的后端使用怀疑受损的索引本身是非常重要的. (实际上,在这种情况下,你可能会发现后端启动后马上就崩溃了, 因为它们倚赖于这些已经崩溃的索引.)为了安全地恢复,你必需关闭 postmaster,然后运行一个独立运行的 PostgreSQL 后端,给予它命令行参数 -O 和 -P (这些选项分别是允许对系统表进行修改 并且避免了系统索引的使用).然后发出 REINDEX DATABASEREINDEX TABLE,或者 REINDEX INDEX, 命令,具体取决于你想重新构造多少东西.如果觉得有疑问,那么 用 REINDEX DATABASE FORCE 强制重建数据库中所有系统表. 然后退出独立运行的后端,重启 postmaster.

因为这种情况可能是大多数用户可能用到独立运行的后端的唯一机会, 那么我们必需事先知道一些用法在顺序上的注意事项∶

参阅 postgres 手册页获取更多信息.

用法

重建表 mytable 上的索引:

     REINDEX TABLE mytable;
   

重建单个索引∶

    REINDEX INDEX my_index;
   

重建所有系统索引(这个只能运行在独立运行的后端中.)

REINDEX DATABASE my_database FORCE;
   

兼容性

SQL92

SQL92里没有 REINDEX