我从Postgres文档中读到这篇文章:
同时构建索引
... PostgreSQL支持构建索引而不会锁定写入。这个 通过指定CREATE的CONCURRENTLY选项来调用方法 指数。使用此选项时,PostgreSQL必须执行两次扫描 该表,此外它必须等待所有现有的事务 可能会修改或使用索引终止。这样 方法需要比标准索引构建和更多的总工作量 完成时间要长得多。但是,因为它允许正常 在构建索引时继续操作,此方法很有用 用于在生产环境中添加新索引....
在并发索引构建中,索引实际输入到 系统目录在一个事务中,然后两个表扫描发生在两个 更多交易。在每次扫描表之前,索引构建必须等待 对于已修改表以终止的现有事务。 在第二次扫描之后,索引构建必须等待任何事务 有第二次扫描的快照(见第13章) 终止。然后最后索引可以标记为可以使用,并且 CREATE INDEX命令终止。然而,即使这样,指数也可能没有 可立即用于查询:在最坏的情况下,它不能 只要在索引开始之前存在事务就会使用 建立。
什么是系统目录?什么是表扫描?所以听起来首先构建索引,然后它必须等待现有事务(在索引构建期间发生的事务?)终止,然后等待具有超过第二次扫描的快照的任何事务终止(这是什么?是什么意思?它与第一个声明有什么不同?这些扫描是什么?
答案 0 :(得分:1)
create index
,不允许对数据进行任何更改,而concurrently
扫描两次,但在构建索引时改变数据