buffalo项目中需用soda cli回滚迁移:单次执行soda migrate down -e development,多步可重复运行或指定时间戳-t;强制重置需清空schema_migrations表并手动清理数据库变更。

在 Buffalo 项目中执行数据库迁移后发现 SQL 有误、字段名写错或表结构不符合预期,需要立即撤销上一次迁移操作,避免手动改库或清空数据。
用 soda CLI 回滚单次迁移
Buffalo 自带的 buffalo db migrate 命令不支持回滚,必须切换到底层 Pop 工具 soda:
进入项目根目录,运行:soda migrate down -e development
这条命令会查找 migrations/ 目录下最新一条已执行的 migration 文件(按文件名时间戳倒序),执行其 down 函数内容,并从 schema_migrations 表中删除对应记录。
【migration 文件必须同时包含 up 和 down 方法】 若你用 buffalo db generate 创建迁移,则自动具备双向函数;但若手写迁移且只写了 up,执行 down 会报错并中断,无法回退。
回滚多步迁移
方法一:重复执行多次 down
每运行一次 soda migrate down -e development 就回退一步。想回退三步,就连续敲三次。
方法二:指定目标版本号回退
先查看当前已执行的迁移列表:soda migrate status -e development
输出中带 applied 标记的行即为已执行项,注意其前缀时间戳(如 20260922143022)。
Buffalo框架 1.0.1 版本源码包下载,适合需要错误处理改进、依赖更新、render.Download 注释和 request logger 调整的 v1 项目。
然后执行:soda migrate down -e development -t 20260922143022
该命令会将所有时间戳大于等于 20260922143022 的迁移全部撤回——注意是“大于等于”,不是“等于”。
⚠️ 如果目标时间戳不存在于已执行列表中,soda 不会报错,而是静默跳过,实际未执行任何回滚。务必核对 status 输出后再填 -t 参数。
强制重置迁移状态(慎用)
第一步:停止所有正在连接数据库的服务,包括 buffalo dev、后台 worker 或其他测试进程。
第二步:直接删掉 schema_migrations 表里的全部记录:psql -d your_db_name -c "TRUNCATE schema_migrations;"(PostgreSQL)
或mysql -u root -p your_db_name -e "TRUNCATE TABLE schema_migrations;"(MySQL)
第三步:删除 migrations/ 目录下所有已应用过的 .fizz 文件(保留未执行的)。
【此操作不可逆,且不会还原数据库表结构变更】 TRUNCATE schema_migrations 只是让 Pop “忘记”哪些迁移跑过,它不会把 CREATE TABLE 变成 DROP TABLE。你必须手动用 SQL 或新迁移文件清理残留表、字段或索引。










