You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Drizzle中回滚或降级数据库迁移?官方推荐方案是什么?

Drizzle ORM 迁移回滚与删除方案

核心前提

Drizzle ORM 本身没有内置自动回滚迁移的功能,它的迁移系统基于声明式SQL脚本设计,官方更倾向于让开发者显式控制数据库变更,避免自动回滚带来的数据风险。


官方推荐的回滚/修正方案

1. 编写反向迁移脚本(优先推荐)

如果已经将错误迁移推送到数据库,官方最建议的方式是编写一个新的迁移脚本,反向执行之前的变更:

  • 若之前的迁移是创建表,反向脚本就写 DROP TABLE IF EXISTS [表名];
  • 若之前新增了列,反向脚本就写 ALTER TABLE [表名] DROP COLUMN [列名];
  • 其他变更同理,编写对应的逆向SQL语句

编写完成后,运行对应数据库的推送命令执行反向迁移:

# PostgreSQL示例
drizzle-kit push:pg
# MySQL/MariaDB示例
drizzle-kit push:mysql

2. 重置迁移记录并手动修正数据库

如果不需要保留错误的迁移记录,可以按以下步骤操作:

  1. 手动修正数据库:直接在数据库中撤销之前的变更(比如删除新增的表、恢复被修改的列结构等)
  2. 清除迁移元数据:找到数据库中的 drizzle_meta 表,删除对应错误迁移的记录(Drizzle通过这个表追踪已执行的迁移)
  3. 清理本地文件:删除本地迁移目录中对应的错误迁移文件
  4. 重新生成迁移:运行 drizzle-kit generate 生成正确的迁移脚本,再推送至数据库

关于drop migrations命令的说明

drizzle-kit drop migrations 仅负责删除本地的迁移文件,不会对数据库中的数据或结构做任何修改,也不会更新drizzle_meta表的记录。这就是为什么你执行该命令后,重新运行generate没有效果——数据库仍认为该迁移已经执行过。


是否需要手动操作数据库?

是的,在没有编写反向迁移脚本的场景下,你需要手动回滚数据库的变更。Drizzle不提供自动回滚功能,因为自动回滚可能导致数据丢失或不一致,官方更强调开发者对每一步数据库变更的可控性。

内容的提问来源于stack exchange,提问作者nightwolf555

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 23:33:15