REINDEX - 重建索引
SYNOPSIS
REINDEX { DATABASE | TABLE | INDEX } name [ FORCE ]
DESCRIPTION 描述
REINDEX 基于存储在表上的数据重建索引, 替换旧的索引拷贝。使用 REINDEX 有两个主要原因:
- *
- 索引崩溃,并且不再包含有效的数据。尽管理论上这是不可能发生的, 但实际上索引会因为软件毛病或者硬件问题而崩溃。REINDEX 提供了一个恢复方法。
- *
- 要处理的索引包含大量无用的索引页未被回收。在某些情况下, 这个问题会发生在 PostgreSQL 里面的 B-树索引上。REINDEX 提供了一个缩小索引空间消耗的方法,它采用的方法是写一个不带无用索引页的新版本的索引。 参阅Section 21.2 ``Routine Indexing'' 获取更多信息。
PARAMETERS 参数
- DATABASE
- 恢复一个声明了的数据库的所有系统索引。 不包含用户表上的索引。同样,除非在独立运行模式下,也会忽略在共享系统表上的索引(见下文)。
- TABLE
- 重新建立声明的表的所有索引。如果表有个从属的"TOAST"表,那么这个表也会重新索引。
- INDEX
- 重新建立声明了的索引。
- name
- 要重建的所声明的数据库/表/索引的名称。 表和索引名可以有模式修饰。
- FORCE
- 这是一个废弃的选项,如果声明,会被忽略。
NOTES 注意
如果你怀疑一个用户表上的索引崩溃了,你可以简单地重建该索引, 或者该表上地所有索引,使用 REINDEX INDEX 或者 REINDEX TABLE。 另外一个对付用户表索引崩溃的方法时删除然后重建它。如果你还要在表上进行一些维护动作, 可能这么做更好一些。REINDEX 在表上请求排他锁,而 CREATE INDEX 只是锁住写动作, 而不会锁住读。
如果你从一个崩溃的系统表索引上恢复,事情会更棘手一些。 这种情况下,系统必须不能使用任何有疑问的索引。 (实际上,在这种情况下,你可能发现服务器进程在启动之后马上就崩溃了, 因为依赖于崩溃了的索引。)要想安全恢复,服务器必须带着 -P 选项启动, 它禁止服务器在查找系统表的时候使用索引。
这么做个一个办法事停止 postmaster 然后带着 -P 命令行选项启动一个独立的 PostgreSQL 服务器。 然后,根据你希望恢复的程度,可以发出 REINDEX DATABASE,REINDEX TABLE,或者 REINDEX INDEX。 如果还有怀疑,使用 REINDEX DATABASE 选择重新构造数据库中全部的系统索引。 然后退出独立服务器会话并且重启普通的服务器。参阅 postgres(1) 手册页获取有关如何与独立服务器交互的信息。
另外,一个普通的会话可以在其命令行选项里带着 -P 启动。 这么做的方法因不同的客户端而异,但是在所有基于 libpq 的客户端上, 我们都可以通过在启动客户端之前设置 PGOPTIONS 环境变量为 -P 来实现。 请注意尽管这个方法并不要求锁住其它客户端,但是禁止其它客户端连接受损的数据库, 直到完成修补应该事一个明智的选择。
如果怀疑任何共享的系统表的索引损坏((pg_database, pg_group,或者 pg_shadow), 那么必须用独立服务器的方式来修复它。REINDEX 不能在多用户环境下处理共享系统表。
除了共享系统表之外的所有索引,REINDEX 是抗崩溃并且是事务安全的。 REINDEX 对于共享的索引而言不是抗崩溃的,这就是为什么不允许在正常操作中这么使用的原因。 如果在重新对一个共享表进行索引的时候发生了崩溃,那么在纠正问题之前,就不可能重新启动普通的服务器。 (一个建立了一部分的共享索引的典型症状是"index is not a btree/索引不是 btree 索引"错误。)
在 PostgreSQL 7.4 之前,REINDEX TABLE 并不自动处理 TOAST 表,因此这些表必须用独立的命令进行处理。这么做仍然可以,但是已经多余了。
EXAMPLES 例子
重建表 mytable 上的索引:
REINDEX TABLE my_table;
重建单个索引:
REINDEX INDEX my_index;
重建一个数据库上的所有系统索引,不管他们是否有效:
$ export PGOPTIONS="-P"
$ psql broken_db
broken_db=> REINDEX DATABASE broken_db;
broken_db=> \q
REINDEX - 重建索引的更多相关文章
- MongoDB 学习笔记之 索引选项和重建索引
索引选项: {background:true}在后台创建索引,索引在构建过程中,其他客户端仍然可以查询数据,不会阻塞. db.comments.createIndex({anonymous: 1},{ ...
- ES数据库重建索引——Reindex(数据迁移)
应用背景: 1.当你的数据量过大,而你的索引最初创建的分片数量不足,导致数据入库较慢的情况,此时需要扩大分片的数量,此时可以尝试使用Reindex. 2.当数据的mapping需要修改,但是大量的数据 ...
- ELK学习总结(4-1)elasticsearch更改mapping(不停服务重建索引)
elasticsearch更改mapping(不停服务重建索引)原文 http://donlianli.iteye.com/blog/1924721Elasticsearch的mapping一旦创建, ...
- elasticsearch更改mapping(不停服务重建索引)
转载地址:http://donlianli.iteye.com/blog/1924721?utm_source=tuicool&utm_medium=referral Elasticsearc ...
- elasticsearch更改mapping,不停服务重建索引(转)
原文:http://donlianli.iteye.com/blog/1924721?utm_source=tuicool&utm_medium=referral Elasticsearch的 ...
- Pandas重建索引
重新索引会更改DataFrame的行标签和列标签.重新索引意味着符合数据以匹配特定轴上的一组给定的标签. 可以通过索引来实现多个操作 - 重新排序现有数据以匹配一组新的标签. 在没有标签数据的标签位置 ...
- ElasticSearch(三十)基于scoll+bulk+索引别名实现零停机重建索引
1.为什么要重建索引? 总结,一个type下的mapping中的filed不能被修改,所以如果需要修改,则需要重建索引 2.怎么zero time重建索引? 一个field的设置是不能被修改的,如果要 ...
- elasticsearch重建索引
1.重建索引 一个field的设置是不能被修改的,如果要修改一个Field,那么应该重新按照新的mapping,建立一个index,然后将数据批量查询出来,重新用bulk api写入index中 批量 ...
- Pandas | 08 重建索引
重新索引会更改DataFrame的行标签和列标签. 可以通过索引来实现多个操作: 重新排序现有数据以匹配一组新的标签. 在没有标签数据的标签位置插入缺失值(NA)标记. import pandas a ...
随机推荐
- BitMap位图
BitMap位图算法https://blog.csdn.net/varyall/article/details/79662029 常见面试题 题1:在2.5亿个整数找出不重复的整数,内存不足以容纳着2 ...
- toj 4063 单词(AC自动机)
题目: 小张最近在忙毕设,所以一直在读论文.一篇论文是由许多单词组成的. 但小张发现一个单词会在论文中出现很多次,他想知道每个单词分别在论文中出现了多少次. 输入 第一行一个整数N,表示有N个单词.接 ...
- maven-enforcer-plugin查看冲突
我们会经常碰到这样的问题,在pom中引入了一个jar,里面默认依赖了其他的jar包.jar包一多的时候,我们很难确认哪些jar是我们需要的,哪些jar是冲突的.此时会出现很多莫名其妙的问题,什么类找不 ...
- 前端JS编码规范
对初学者来说应该学习的JavaScript编码规范: 传送门: http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29292475 ...
- 移动端调试 — chrome模拟器基础调试
打开开发者工具,进入chrome调试状态,点击左上角的手机图标,进入手机模拟器调试状态. 模拟器支持操作: 切换设备类型,模拟网络环境,模拟bar,keyboard弹出状态,横屏状态,更改UserAg ...
- 软件-Jenkins:Jenkins 百科
ylbtech-软件-Jenkins:Jenkins 百科 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续 ...
- tomcat启动控制台报Exception in thread ''main".......“Could not find the main class:.....Bootstrap”问题
startup.bat文件打开最后end下一行加pause调试,重新启动tomcat,发现配置没问题,但是依然报错,发现是jdk版本问题,jdk1.6无法与tomcat8适配,重新装个1.7版本的jd ...
- 更新系统时间 & 查看/修改LINUX时区和时间
一.时区0. date '+%Y%M%D' 按照格式显示当前日期,结果如下: date "+%Y-%m-%d %H:%M:%S" 1. 查看当前时区 :[root@master ~ ...
- Fiddler抓包ios亲测
1 打开Fiddler设置端口 2 设置可以抓取https选项 3 手机连接WIFI和电脑处于同一局域网并设置代理端口和fiddler中设置一致 4 证书安装手机浏览器输入代理电脑ip及端口如192. ...
- Android深度探索-卷1第十章心得体会
本章介绍了传统的printk 函数调试技术和其他的调试技术,如gdb gdbserver kgdb 对于复杂的Linux 驱动及HAL 等程序库,需要使用各种方法对其进行调试,如,设置断点.逐步跟踪 ...