全部文章
工具笔记

让 AI 写 PostgreSQL 索引迁移,先确认能否并发执行

CONCURRENTLY 减少阻塞写入,也改变迁移运行方式。

资料核验2026.11.12 · PostgreSQL · 以部署版本文档为准

一个大表要给经常用的查询补索引。把普通 CREATE INDEX 直接塞进发布迁移,可能在构建期间阻挡该表写入。PostgreSQL 提供 CONCURRENTLY,但这条语句不能在事务块内执行。

让助手从这一步开始

把迁移框架、目标表和部署约束交给助手。要求它先查框架是否默认包事务,再写并发建索引的独立步骤,给出失败后怎么识别无效索引。生产操作先只做方案,在测试库演练。

流程示意:检查迁移事务;独立并发建索引;核对有效性

先检查迁移工具怎么包事务

在测试环境确认框架是否默认把迁移装进事务。需要并发建索引时,把操作独立出来并按工具支持的方式执行。它可能需要更久,也会等待相关事务。

中途失败可能留下无效索引。演练时记录如何识别该状态,重新执行前先按文档处理。

上线后同时查索引有效性和目标查询计划。名字出现了,查询也可能还没有使用它。

把问题变成可重跑的样例

在临时库开一条持续写测试表的连接,并运行迁移候选。记录运行时间与写入是否前进。再在独立试验里中断一次构建,检查 catalog 对该索引有效性的记录。只有在隔离环境确认恢复步骤后才安排线上窗口。

核对这几项输出

  • 迁移在正确事务边界执行。
  • 测试写入可继续。
  • 失败后能辨认无效索引。
  • 成功后目标查询计划可核对。

怎么判断改动能不能收

并发建索引并不承诺无等待,也不是所有迁移工具都允许单条跳过事务。让助手把前置条件和演练证据写进交接,避免部署时才发现运行器把语句包进事务。

演练前列出当前活跃连接、迁移事务策略和检查索引有效性的查询。若失败后留下无效索引,先判断是否由这次演练产生。部署时只按已审查的操作计划处理对应索引,不盲目重复执行整个迁移。

资料来源