SuperAPI AI 工具集

django-migrations

编程与开发

查看项目

更新于 10-16 09:51

技能介绍

用途:这是 PostHog 的 Django 迁移模式与安全工作流,在创建、调整或审查 Django/Postgres 迁移时使用,尤其涉及非阻塞迁移、热表、外键与 NOT NULL 变更。ClickHouse 迁移改用 clickhouse-migrations。

主要能力与用法:动手前先读仓库内指定文档:developing-locally.md(Django migrations、非阻塞迁移、合并冲突)、safe-django-migrations.md、databases/schema-changes.md,产品目录下另读 products/README.md。生成迁移用 DEBUG=1 ./manage.py makemigrations [app_label];合并冲突用 python manage.py rebase_migration <app> && git add <app>/migrations。校验用 ./manage.py sqlmigrate <app> <migration_number>,并跑测试确认迁移线性。风险操作优先用 posthog.migration_helpers 的即插即用操作,如 SafeAddIndexConcurrently、SafeRemoveIndexConcurrently、AddConstraintNotValid、AddForeignKeyNotValid、ValidateForeignKey、CreateIndexConcurrently,所有并发索引操作需 atomic = False;不要用 Django 的 AddIndexConcurrently,CI 会拦截。

关键限制:绝不删除已在 master 的历史迁移文件(含 0001_initial.py),删除不会撤销表与约束,还会被 CI 的 lint:migration-deletions 与 Migration Risk Analysis 拦截;有意的删除须登记在 .github/scripts/migration-deletion-allowlist.txt。淘汰模型应保留 DeleteModel 迁移并包在 SeparateDatabaseAndState 中,部署后至少等待一个完整部署周期,再另建 RunSQL 迁移 DROP TABLE。posthog_team、posthog_user、posthog_organization、posthog_project 属热表,任何 ALTER TABLE 都需 ACCESS EXCLUSIVE 锁,需走 HotTableAlterPolicy 并登记 hot_table_acknowledged_migrations.txt;指向热表的外键建议 db_constraint=False,或用两阶段加约束。非 Django 写入者(nodejs、rust、Temporal)用裸 INSERT,新增 NOT NULL 列需同时设 default= 与 db_default=,并用 sqlmigrate 确认没有多余的 DROP DEFAULT。资料未提供更多版本或性能数据。