当这个选择被使用时,POSTGRESQL 在添加索引时将对于当前表的操作中的插入,更新,删除不会在加锁,而一个标准的INDEX 创建的过程是对于以上操作加锁的直到操作完毕....在有以上的知识后,我们看看 concurrently index 是怎么建立的
1 建立索引的元数据信息,如索引的列信息,索引的名字等信息,此时索引的信息对外不可见
2 索引建立元数据信息后,索引就可见了并且对其他的进程可见..., 相关的索引开始建立与TUPLE的关联以及HOT CHAIN的关系,此时有一个问题就是在建立索引时,已经有一些事务在处理,而这些事务是不会知道相关新的索引建立的事情,而这些事务修改数据会在cache中存在...,直到check point点后,落入磁盘.所以建立索引的点必须是在所有的事务都可见索引的情况下,索引才能开始建立.
3 索引开始建立, 而此时索引建立时是通过SNAPSHOT 时刻来建立的索引,此时建立的索引只是基于这一个时刻...在对这一时刻SNAPSHOT 数据表建立完索引后,第一次建立索引结束.
4 此时索引还并不能投入使用,这时的索引和实际的表的索引的差距是SNAPSHOT 和实际表中数据之间的差别,也是建立索引时到索引建立完毕后这一段时间表的变化或添加的新的行