PostgreSQL并发索引创建 - 索引无效

时间:2017-05-12 06:46:01

标签: postgresql concurrency

我们要求包含索引大小而不锁定表。我试图使用'并发创建索引..',但它导致在其中一个系统上创建INVALID索引。我们试图做 - 下降指数 - 同时丢弃索引 - reindex表 然而间歇性地他们也被卡住了。这使得通过脚本同时创建索引的整个方法很容易受到攻击。

任何想法如何在没有人工干预的情况下完全证明这一点?如果没有,在大型和繁忙的表上以自动方式在postgreSQL上包含索引大小的其他有效方法是什么。

1 个答案:

答案 0 :(得分:0)

要在脚本中并发构建索引,您需要在下一个命令中添加逻辑(因为您无法放入事务中)。只需检查下一行中的索引是否为INVALID,如果是,则中止脚本。

我也会反向行动:首先你要同时建立新的索引。如果成功,请放弃旧的。

https://www.postgresql.org/docs/current/static/sql-createindex.html

  

如果在扫描表格时出现问题,例如死锁或   CREATE INDEX命令会在唯一索引中使用唯一性违规   失败但留下了“无效”索引。该索引将被忽略   用于查询目的,因为它可能是不完整的;但它会   仍然消耗更新开销。

  

另一个区别是常规的CREATE INDEX命令可以   在事务块中执行,但CREATE INDEX CONCURRENTLY   不能。