Ecto迁移生成器

1小时前更新 2 00
Ecto迁移生成器Ecto迁移生成器
Ecto迁移生成器

技能简介

ecto-migrator 将自然语言描述或 Schema 定义转换为 Ecto 迁移文件,支持表结构、索引、约束、外键关联、枚举类型及分区策略,覆盖 Elixir/Phoenix 项目的数据库变更全流程。

业务背景

开发团队频繁遇到数据库结构变更需求,手写Ecto迁移文件耗时且易出错。该工具让业务人员用日常语言描述表结构、索引或关联需求,自动生成标准迁移代码,减少沟通成本和人工编码错误,确保Elixir/Phoenix项目的数据库变更加速落地。

落地案例:产品经理提出"为用户表增加手机号字段,并给邮箱建唯一索引"。开发者在工具中输入该描述,系统自动生成包含add :phone字段、create unique_index(:users, [:email])的迁移文件,同时提示大表索引需加concurrently选项。生成的代码可直接放入项目执行,无需手动查阅Ecto文档编写模板。

能做什么

  • 根据口语化描述生成 create/alter/drop 等迁移操作
  • 自动处理 UUID 主键、时间戳、JSONB、数组等列类型
  • 创建 B-tree、GIN、部分索引及并发索引
  • 添加检查约束、排他约束与外键关联规则
  • 支持可逆迁移、数据迁移及多租户 tenant_id 模式

使用说明

安装依赖

# mix.exs
defp deps do
  [
    {:ecto_sql, "~> 3.0"},
    {:postgrex, "~> 0.16"}
  ]
end

生成迁移文件

mix ecto.gen.migration create_users_table

常用指令示例

# 创建带字段的表
"Create users table with email and name"
→ create table(:users) do ... end

# 添加列
"Add phone to users"
→ alter table(:users), add :phone

# 唯一索引
"Make email unique on users"
→ create unique_index(:users, [:email])

# 检查约束
"Add a check constraint on orders amount > 0"
→ create constraint(:orders, ...)

输入与输出

见下方输入与输出表格。

项目内容
输入自然语言描述、Schema 定义、字段清单、索引/约束需求、多租户配置
输出Ecto 迁移文件(.exs)、change/up/down 函数、索引约束代码、外键配置、数据迁移模板
适用人群Elixir/Phoenix 开发者、需快速建库的团队、多租户系统维护者、Ecto 新手
不包含连接池配置、生产执行权限、查询优化、非 PG 数据库支持

 

风险提示

  • 生产环境执行前务必在开发/测试库验证迁移逻辑
  • 大表加索引请使用 concurrently: true 并配合 @disable_ddl_transaction true
  • 避免对金钱字段使用 :float,改用 :integer(分)或 :decimal
  • Postgres 原生枚举难以回滚,建议用 :string + Ecto.Enum
  • 外键 on_delete 行为需按业务场景选择,误配可能导致数据级联丢失

来源信息

原始链接:https://github.com/openclaw/skills/tree/main/skills/gchapim/ecto-migrator/SKILL.md
来源类型:GitHub 仓库

数据统计

相关导航

暂无评论

none
暂无评论...