Bitnami Redmine数据库迁移遇重复表/列,如何跳至指定版本?
解决Redmine数据库迁移“列或表已存在”并跳至指定版本的方案
1. 确认迁移状态
首先执行命令查看所有迁移任务的当前状态,区分哪些是标记为待执行(down)但实际已在数据库中存在的版本:
rake db:migrate:status RAILS_ENV=production
输出会列出所有迁移文件的版本号和状态,示例如下:
down 20210315082345 Add custom field to issues up 20210420121000 Create projects table
标记为down但执行时提示“列或表已存在”的版本,就是需要手动标记为已完成的目标。
2. 直接标记迁移为已完成
如果确认这些down状态的迁移实际已经执行(表/列已存在),可以直接将版本号写入schema_migrations表,跳过重复执行:
- 登录Redmine对应的数据库(Bitnami默认多为MySQL或PostgreSQL),执行SQL语句:
INSERT INTO schema_migrations (version) VALUES ('20210315082345'), ('其他需要标记的版本号');
替换对应的版本号即可批量标记完成。
3. 跳转到指定版本的迁移命令
如果需要将数据库直接迁移到某一特定版本(而非全部完成),可使用以下命令:
rake db:migrate VERSION=目标版本号 RAILS_ENV=production
该命令会自动执行所有未完成的迁移直到指定版本,若目标版本之前的迁移已实际执行(表/列存在),需先按步骤2标记为已完成,避免重复报错。
注意事项
- 操作前务必备份数据库,防止数据丢失;
- 切换到Bitnami Redmine的安装目录(如
/opt/bitnami/redmine)执行命令,必要时使用sudo获取权限; - 若不确定哪些迁移已实际执行,可对比数据库表结构与迁移文件的内容,确认后再标记。
内容的提问来源于stack exchange,提问作者Timoteo Ribeiro de Melo
相关产品推荐
相关产品推荐

