2026/1/10 11:44:37
网站建设
项目流程
广州正规网站建设哪家好,wordpress 模版 婚礼,个人工作室经营范围,桂林北站怎么去阳朔当 migrations 历史已经损坏#xff0c;但是数据库的数据还是完好的#xff0c;这时简单的方法是删除迁移历史记录#xff0c;以数据库内容重建迁移历史#xff0c;也就是以当前数据库的状态重建基线#xff0c;具体如下。
实际情况是#xff0c;当你应用 migrate 命令时…当 migrations 历史已经损坏但是数据库的数据还是完好的这时简单的方法是删除迁移历史记录以数据库内容重建迁移历史也就是以当前数据库的状态重建基线具体如下。实际情况是当你应用 migrate 命令时报错显示迁移历史记录丢失。这种情况发生的原因是你的数据库中存在一个名为_prisma_migrations的表记录了过去所有的迁移历史那几十个2025xxxx的记录但你本地的prisma/migrations文件夹为空。Prisma 发现数据库记录的迁移在本地找不到因此认为发生了“漂移Drift”。千万不要运行prisma migrate reset否则会清空所有数据。按照以下步骤通过“基线化Baselining”来恢复迁移功能第一步清理数据库中的迁移记录由于你本地的迁移文件已经丢失且你想重新开始我们需要让数据库“忘记”之前的迁移历史。连接到你的数据库使用 pgAdmin, TablePlus 或命令行执行以下 SQL-- 删除所有旧的迁移记录这样 Prisma 就会认为这是一个新起点TRUNCATETABLE_prisma_migrations;第二步创建初始迁移文件基线现在我们要根据当前的schema.prisma创建一个新的“起始”迁移文件但不立即执行它因为表已经在数据库里了。创建迁移文件夹如果不存在mkdir-p prisma/migrations/0_init使用prisma migrate diff生成当前 schema 的全量 SQLnpx prisma migratediff\--from-empty\--to-schema-datamodel prisma/schema.prisma\--scriptprisma/migrations/0_init/migration.sql这一步会把当前的模型定义生成为一个完整的migration.sql文件。第三步标记该迁移已完成关键我们需要告诉 Prisma“这个0_init迁移已经应用过了你不需要再往数据库里跑 SQL 了”。执行以下命令npx prisma migrate resolve --applied 0_init第四步同步并验证现在你的本地文件0_init和数据库记录_prisma_migrations表里的一条记录就同步了。尝试运行npx prisma migrate dev结果预测如果你的schema.prisma和 数据库结构完全一致Prisma 会提示Already in sync。如果你有细微改动Prisma 会提示你创建一个新的迁移。常见问题排查1. 如果执行migrate resolve报错找不到文件确保目录结构如下prisma/ schema.prisma migrations/ 0_init/ migration.sql2. 以后改了 schema 怎么办现在迁移功能已经恢复了。以后只需正常运行npx prisma migrate dev --name add_new_field3. 为什么不直接用migrate dev --create-only因为当数据库中存在_prisma_migrations记录而本地没有文件时Prisma 的安全机制会强制要求reset。手动清空该表并resolve是绕过此机制且保护数据的标准做法。建议修复完成后务必将新的migrations文件夹提交到 Git 仓库防止再次丢失。