ruby迁移回滚但在再次运行迁移时出错
这是我在RoR应用程序中运行迁移时遇到的错误:
PG::Error: ERROR: column "bulk_bill" of relation "questionnaires" already exists
一点背景:我回滚了一个迁移,以便我可以更改列的默认设置。 一旦我再次运行迁移,我就得到了上面的错误。
我可以在开发中的postgresql表中看到该列确实存在。 我在表和bulk_bill列中有一个数据,它的默认设置为false。
我需要采取哪些建议步骤才能成功运行迁移。 我是ruby的初学者,发现ruby文档仍然有点难以理解。
def up add_column :questionnaires, :bulk_bill, :boolean, :default => false end def down remove_column :pnp_questionnaires, :bulk_bill end
在你的up
方法中,你在questionaries
表上创建了列,在你的down方法中你将它从pnp_questionaries
中删除。 如果表不存在,删除列不会引发除外,因此您遇到了问题。
最简单的解决方案
-
add_column
。 - 运行迁移(是的,运行空迁移)。
- 修复你的
down
方法以删除questionaries
表。 - 回滚迁移。
- 取消注释你的
up
方法。
更新:
我的不好之处3是’从问题中删除专栏’,而不是’删除表’。
您需要重新运行创建表的迁移(希望您在此期间不会改变它)。 转到给定的迁移,注释掉方法体,然后运行rake db:migrate:redo VERSION=xxxxxxx
其中xxxxxx
是此迁移文件名中的时间戳。