Help us learn about your current experience with the documentation. Take the survey.

维护操作

本页面详细介绍了可能与开发相关的各种数据库操作。

禁用索引是不安全的

以前,本节描述了一个在删除索引前将其标记为无效的流程。 现在已不再推荐这样做,因为这样做不安全

在某些情况下,你可能希望在删除索引前先禁用它:

  • 该索引位于一个大表上,如果需要回滚,重建该索引会花费很长时间。
  • 不确定该索引是否被用于一些无法完全追踪的查询中。

在这种情况下,需要与基础设施团队和数据库团队协调,通过创建一个生产基础设施问题(使用“生产变更”模板),然后运行以下命令:

-- 禁用索引,然后运行一个已知会使用该索引的 EXPLAIN 命令:
UPDATE pg_index SET indisvalid = false WHERE indexrelid = 'index_issues_on_foo'::regclass;
-- 在副本上验证索引是否无效:
SELECT indisvalid FROM pg_index WHERE indexrelid = 'index_issues_on_foo'::regclass;

-- 回滚无效化操作:
UPDATE pg_index SET indisvalid = true WHERE indexrelid = 'index_issues_on_foo'::regclass;

有关参考,请参见此示例基础设施问题