【问题标题】:I dropped a table and want to create a new one - but I don't want to lose my other tables我删除了一张桌子并想创建一个新桌子 - 但我不想丢失我的其他桌子
【发布时间】:2017-08-21 07:37:54
【问题描述】:

这可能真的很简单/很明显,但我是新手 -

我有一个包含一些表的数据库,比如说 tA、tB 和 tC。在一次迁移中,我放弃了 tC,因为那时我需要在不同的分支上工作。但是,我现在正在一个需要 tC 存在的项目的分支上工作。

用于创建所有表的迁移都存在于此分支上。

我不在乎 tC 是否为空。但是如果我运行rake db:create,它会重新创建所有表吗?因为我不想丢失其他表 tA & tB 中的数据。

TL;DR - 如何创建一个表(我在之前的创建中删除的)而不重新创建(并丢失数据)我没有删除的表?

【问题讨论】:

  • 如果您在 change 块中的迁移中删除了 tC,您可以简单地 rake db:rollback 重新创建该表。

标签: ruby-on-rails rake


【解决方案1】:

这就是我最终要做的事情:使用 Rails 控制台,我只是运行了重新创建该特定表的迁移。请参阅此问答:Run a single migration file

【讨论】:

    【解决方案2】:

    你是如何删除表 tC 的?是通过控制台/命令行吗?如果是,那么要重新创建 tC 表,您有 2 个选择:

    1. 创建一个新的迁移文件以仅创建表 tC(最佳且最简单的修复)

      bundle exec rails g migration CreateTableTC
      

    然后用这个条件语句添加新的迁移:

        unless table_exists?(:table_tC)
          create_table :table_tC do |t|
            ........
          end
        end
    

    然后在你的终端上运行这个命令:

        bundle exec rake db:migrate
    

    如果您的数据库没有表,这将创建表 tC,不会擦除其他表上的数据,如果您的数据库有表 tC,则不会执行

    1. 为您的数据库使用 GUI(如果您使用的是 postgres,则可以使用 PgAdmin)

    【讨论】:

      猜你喜欢
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 2019-02-25
      相关资源
      最近更新 更多