【问题标题】:ruby dropped table but can't recreate with migrationruby 删除了表,但无法通过迁移重新创建
【发布时间】:2014-03-06 00:50:53
【问题描述】:

在回滚迁移中删除了一个表。迁移本身已更改,因此向下部分删除了表。 我再次运行了创建表的迁移

rake db:migrate:redo VERSION=20120912122332

==  CreateQuestionnaires: reverting =====================================
-- drop_table("questionnaires")
rake aborted!
PG::Error: ERROR:  table "questionnaires" does not exist

它似乎在重做迁移之前试图删除表。由于它不存在,因此无法运行其余的迁移。 这是正确的,如果是,我该如何重新创建表格

【问题讨论】:

  • 请展示您的迁移...
  • 我认为你误解了redo。它是down,后跟up

标签: ruby-on-rails ruby postgresql rails-migrations


【解决方案1】:

该表已被删除。

我建议你使用

rake db:migrate VERSION=20120912122332

由于重做将再次尝试回滚,即删除您在早期阶段已经删除的表。因此,您遇到了失败。

【讨论】:

  • 此命令试图在 VERSION=20120912122332 之后恢复迁移,但其中一些失败
  • 这个命令只会运行版本为20120912122332 的迁移,除非你没有在命令中指定版本。
  • 确保您只有一个版本前缀为 20120912122332 db/migrate 文件夹的迁移文件
  • 这是我运行的命令:rake db:migrate VERSION=20120912122332 我已经扫描了迁移列表,只有 1 个带有此时间戳的迁移
【解决方案2】:

您可以编辑迁移并手动执行DROP TABLE,如果该表不存在,您可以添加一个 IF EXISTS 以忽略 DROP TABLE:

def down
  connection.execute('drop table if exists questionnaires')
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 2014-12-30
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多