SuperAPI AI 工具集

django-migration-psql

数据与分析

查看项目

更新于 10-16 04:35

技能介绍

用途:审查 Django 迁移文件是否符合 Prowler 特定的 PostgreSQL 最佳实践。触发场景包括创建新迁移、运行 makemigrations 或 pgmakemigrations、审查新增或修改迁移的 PR,以及向数据库添加索引、约束或模型。

主要能力与规则:

  1. 拆分自动生成的迁移。makemigrations 会把 CreateModel、AddIndex、AddConstraint 打包进一个文件,需按关注点拆分:CreateModel 与 AddConstraint 同属结构变更放一起;AddIndex 单独成文件;分区表索引拆为两步。
  2. 索引与建表分离。CreateModel + AddConstraint 同一迁移,AddIndex 单独迁移,避免索引失败回滚建表。
  3. 每张表的索引各自一个迁移文件,禁止在一个迁移中混用不同 model_name 的 AddIndex。
  4. 分区表(findings、resource_finding_mappings)索引需两步:先用 api.db_utils 的 create_index_on_partitions 并设 atomic = False(CREATE INDEX CONCURRENTLY 不能在事务内运行),再单独用 AddIndex 在父表注册。
  5. 大表索引可先 --fake 迁移,再在低峰期手动执行 CREATE INDEX CONCURRENTLY,最后在父表注册。
  6. 数据回填禁止内联,迁移只派发 Celery 任务,任务按租户分批处理,每批一个 rls_transaction,使用 bulk_create/bulk_update 并设 batch_size=500,读取用 iterator() 与 only()/values_list(),逐项捕获失败并记录总数。

使用方式:按决策树判断迁移类型,逐条对照规则审查,输出违规项(含规则编号与说明)、修正后的迁移文件,分区表需同时给出分区与父表迁移。若全部通过则明确说明。可配合 Context7 MCP 查询 Django 5.1 文档。

限制:该技能针对 Prowler 项目与 PostgreSQL,其他项目或数据库未必适用;具体命令与辅助函数以资料为准,未提供的细节暂未提供。