【问题标题】:Drop and Recreate a single table (on Heroku)删除并重新创建单个表(在 Heroku 上)
【发布时间】:2011-03-07 18:55:32
【问题描述】:

我的应用处于测试阶段,我一直在对涉及新模型的功能进行有限的测试。经过大量测试后,我不得不进行结构更改,使旧数据无法正常工作。

我需要做的只是删除并重新创建一个表。我知道我可以在迁移中做到这一点,但这似乎是一种 hack。在本地开发副本中,我只会使用db:reset,但在测试版应用程序中,我不想丢失除此之外的任何表中的数据。

这是指示生产应用删除并重新创建单个表的简单方法吗?就我而言,我正在使用 Heroku 进行部署,以防影响您解决此问题的方式。

【问题讨论】:

    标签: sql ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    要清空 Heroku 上的表而不更改架构,请在应用程序的目录中:

    $ heroku run console
    Ruby console for myap.heroku.com
    >> ModelName.delete_all
    >> exit
    

    【讨论】:

    • 谢谢,这很完美,看起来比删除/重新创建迁移更简单。出于好奇,这是否还会将 ID 自动增量重置为 1?这不是必需的,但如果第一条记录(擦除后)仍然从 ID:1 开始,我会感觉更干净
    • @Andrew 我相信 truncate 是您正在寻找的 sql 命令。文档postgresql.org/docs/9.1/static/sql-truncate.html
    • 在 heroku 上,您现在使用“heroku run rails console”
    【解决方案2】:

    我知道我可以在迁移中做到这一点,但这似乎是一种 hack。

    这不是黑客。这正是迁移的目的。

    【讨论】:

    • 即使您没有对架构进行任何更改,也只是“重新创建”一个表?
    • @Andrew 我以为您说您进行了结构更改,使旧数据无法正常工作?所以架构会有所不同,对吧?
    • 我想我的意思是,架构经过多次迁移演变,使得旧数据不再完全正常工作。现在的模式是正确的,但是一些关联等已经发生了足够的变化,以至于旧数据有时会引发异常。
    【解决方案3】:

    您需要重新运行该表的迁移以进行结构更改。我以前没有使用过 ActiveRecord,但我也会使用 heroku 控制台中的ModelName.delete_all 删除表中的数据。

    【讨论】:

      【解决方案4】:
      heroku run console
      irb(main):001:0> ModelName.delete_all
      

      你就完成了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-26
        • 1970-01-01
        相关资源
        最近更新 更多