【问题标题】:Remove table from schema without deleting it from the database?从模式中删除表而不从数据库中删除它?
【发布时间】:2014-05-06 15:02:05
【问题描述】:

我最近开始在我的 Rails 项目中使用现有数据库,但我意识到该数据库中的所有表都已合并。

我仍然需要其中一些表格,只是不适合这个项目。

恐怕通过迁移删除它们也会从我的实际数据库中删除它们。我可以从 schema.rb 中手动删除它们吗?

【问题讨论】:

  • schema,你的意思是db/schema.rb吗?
  • 看这里(stackoverflow.com/questions/9884429/…) 了解 schema.rb 的用途,ActiveRecord 不使用它来加载数据库表。所以从那里删除任何东西都是没有目的的。
  • 为什么要从架构中删除它们?我的意思是,将它们包含在您的架构中会导致什么问题?

标签: mysql ruby-on-rails ruby-on-rails-4 migration


【解决方案1】:

db/schema.rb 就像您的完整数据库的蓝图。所以,不,不可能在数据库中有表并避免在db/schema.rb 中显示它们,因为它会选择您数据库的 complete 模式。即使您在数据库中手动添加新表(即没有迁移),它仍然会反映在db/schema.rb

根据 Rails 指南,

请注意,运行 db:migrate 任务也会调用 db:schema:dump 任务,它将更新您的 db/schema.rb 文件以 匹配结构 您的数据库

Rails Guide 的另一个参考总结了它

移民,尽管可能很强大,但不是权威来源 为您的数据库架构。该角色属于 db/schema.rb 或 SQL 文件Active Record 通过检查数据库生成。他们 不是为编辑而设计的,它们只是代表当前状态 数据库

【讨论】:

    【解决方案2】:

    创建一个空的迁移文件并编辑它以使用 drop table:

    drop_table :table_name

    【讨论】:

    • 谢谢@tTam。之后我还应该运行rake db:migrate 吗?
    • 这实际上会从数据库中删除表。那是你想要的吗? @jiggabits
    • @Kirti 不,我不想从我的数据库中删除这些表。仅来自我的架构。
    猜你喜欢
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 2021-09-29
    相关资源
    最近更新 更多