首页 > 解决方案 > Postgres 在 UPDATE 语句中包含 REINDEX

问题描述

我有一个带有一个表的数据库,该表已逐步修补并具有许多索引。但有时补丁没有发生,新补丁变得非常大。这使得在实践中删除索引、修补表和重置索引变得更加智能。但这似乎很可怕,实际上对于使用该表的用户来说,这不是一种选择。所以我认为有可能在更新语句期间重置索引,或者更好地让 postgres 自我检查它是否是最优的。(我正在使用 postgres 10,这可能是通过升级解决的问题)。我希望你能帮助我。

标签: postgresql

解决方案


不,没有好的解决方案,也没有未来版本的解决方案。

您要么保留索引,并且必须在“补丁”期间维护它们;或者您将它们放在与“补丁”相同的事务中并稍后重建它们,在这种情况下,该表将被锁定以防止所有其他用途;或者您将它们放在单独的事务中并稍后重建它们,在这种情况下,其他会话可以看到处于未索引状态的表。

原则上可以通过一些方法来改进这一点(例如,以与 create-index-concurrently 结束相同的方式结束“补丁”,在索引和表之间进行合并连接。但由于 CIC 必须在其自己的事务中,它不清楚如何将它们硬塞在一起),但我不知道目前正在进行任何有前途的工作。


推荐阅读