我们要求包含索引大小而不锁定表。我试图使用'并发创建索引..',但它导致在其中一个系统上创建INVALID索引。我们试图做 - 下降指数 - 同时丢弃索引 - reindex表 然而间歇性地他们也被卡住了。这使得通过脚本同时创建索引的整个方法很容易受到攻击。
任何想法如何在没有人工干预的情况下完全证明这一点?如果没有,在大型和繁忙的表上以自动方式在postgreSQL上包含索引大小的其他有效方法是什么。
答案 0 :(得分:0)
要在脚本中并发构建索引,您需要在下一个命令中添加逻辑(因为您无法放入事务中)。只需检查下一行中的索引是否为INVALID,如果是,则中止脚本。
我也会反向行动:首先你要同时建立新的索引。如果成功,请放弃旧的。
https://www.postgresql.org/docs/current/static/sql-createindex.html:
如果在扫描表格时出现问题,例如死锁或 CREATE INDEX命令会在唯一索引中使用唯一性违规 失败但留下了“无效”索引。该索引将被忽略 用于查询目的,因为它可能是不完整的;但它会 仍然消耗更新开销。
和
另一个区别是常规的CREATE INDEX命令可以 在事务块中执行,但CREATE INDEX CONCURRENTLY 不能。