mirror of
https://gh-proxy.org/https://github.com/klinsmaya/SQLBot.git
synced 2026-11-08 01:06:59 +08:00
2.5 KiB
2.5 KiB
数据库迁移 Agent 说明
基本规则
- 数据库是 PostgreSQL;SQLModel 变更必须配套 Alembic 迁移。
- 迁移位于
backend/alembic/versions/。 - 文件名沿用三位编号加语义描述(存在
009_0、009_1子编号形态);编号从现有迁移文件推导下一个可用值,不要假设固定值。 - 每个迁移必须:
- 设置唯一
revision; - 把
down_revision指向当前 head; - 提供
upgrade()和可执行的downgrade(); - 保持单线迁移链,不创建并行 head。
- 设置唯一
生成方式:
cd backend
uv run alembic revision --autogenerate -m "073 describe change"
autogenerate 只是草稿。必须人工检查:
- 是否漏掉 xpack 或延迟导入模型的表;
- 索引、约束、默认值、nullable、comment 是否完整;
- 是否包含无关表或历史差异;
- PostgreSQL 方言是否正确,尤其是
JSONB、VECTOR和USING转换。
结构迁移
- 新增非空列优先采用两步:先加 nullable 列并回填,再视需要收紧约束。
- 有默认值语义时明确
server_default,不要只依赖 Python 模型默认值。 - 修改类型时提供 PostgreSQL
USING表达式;参考071_modify_permission_jsonb.py。 - 删除或重命名列先确认代码、导出、报表和 xpack 调用没有旧名残留。
- 不要在迁移里顺手重命名历史表或整理无关 schema。
数据迁移
- 数据回填必须分批,避免长事务锁表。
- 先明确空值、重复值和非法历史值的默认策略。
- 不要在迁移中调用业务 CRUD;使用面向迁移的 SQL 或轻量对象。
- 涉及加密、embedding 或外部系统时,说明为什么迁移期可以安全执行。
- downgrade 若无法完整恢复数据,必须显式说明局限,不要伪装成无损回滚。
xpack schema
- xpack 表结构变更属于跨仓库接口变更。
- 先确认主仓库将锁定的 xpack wheel 版本,并检查该版本中的模型。
- 不要把仅闭源功能需要的表混进开源功能迁移。
- 发布顺序遵循
docs/agents/packaging.md。
验证
在有可用的一次性开发数据库前,不要默认执行迁移。至少执行:
cd backend
uv run alembic heads
uv run alembic history
确认只有一个 head 且新迁移的父节点正确。对一次性数据库执行 upgrade head,必要时再执行一级 downgrade 验证回滚。数据库结构变更要同步检查模型、CRUD、API schema、导出/导入和 xpack 调用。