postgresql - Postgres 在 UPDATE 语句中包含 REINDEX
问题描述
我有一个带有一个表的数据库,该表已逐步修补并具有许多索引。但有时补丁没有发生,新补丁变得非常大。这使得在实践中删除索引、修补表和重置索引变得更加智能。但这似乎很可怕,实际上对于使用该表的用户来说,这不是一种选择。所以我认为有可能在更新语句期间重置索引,或者更好地让 postgres 自我检查它是否是最优的。(我正在使用 postgres 10,这可能是通过升级解决的问题)。我希望你能帮助我。
解决方案
不,没有好的解决方案,也没有未来版本的解决方案。
您要么保留索引,并且必须在“补丁”期间维护它们;或者您将它们放在与“补丁”相同的事务中并稍后重建它们,在这种情况下,该表将被锁定以防止所有其他用途;或者您将它们放在单独的事务中并稍后重建它们,在这种情况下,其他会话可以看到处于未索引状态的表。
原则上可以通过一些方法来改进这一点(例如,以与 create-index-concurrently 结束相同的方式结束“补丁”,在索引和表之间进行合并连接。但由于 CIC 必须在其自己的事务中,它不清楚如何将它们硬塞在一起),但我不知道目前正在进行任何有前途的工作。
推荐阅读
- intellij-idea - 如何向 WebStorm/IntelliJ(使用 Angular)中的所有元素永久添加(touchStart)之类的事件
- azure - Azure Batch 在池上安装 blob 存储导致错误“无法安装包”
- charts - 我想在 GEE 中生成 NDVI 时间序列图表,但遇到错误“生成图表时出错:超出用户内存限制”。
- android - 在 Activity_main 中出现另一个窗口而不是主窗口
- java - 如何在代码运行的同一位置创建目录?
- regex - 如何检测给定字符串中的停用词并仅将该停用词从句子大小写或大写转换为小写
- asp.net - 如何在 Web Api 2 中实现 Oauth Refresh Token
- php - Guzzel 异常 - 500 内部服务器错误
- .net - 将 .Net Framework 类库添加到 .Net 核心控制台应用程序是否是个好主意
- maven - 在 azure pipeline mule 4 中无法执行 maven 的目标