【问题标题】:bundle exec rake db:migrate -- schema.rb regenerated WITHOUT indicesbundle exec rake db:migrate -- schema.rb 在没有索引的情况下重新生成
【发布时间】:2016-11-05 18:48:58
【问题描述】:

我有一个大型数据库,其中包含大量表和这些表上的许多索引。每次我运行迁移时,都会生成 schema.rb 文件,除了不包含任何索引。新表和列添加良好。如果我在迁移后手动将 add_index 行重新添加到 schema.rb 文件中,它可以正常工作,但是在每次迁移后执行此操作很麻烦。

几个月来我一直在处理这个问题,但找不到任何解决方案或解决方法。有谁知道会发生什么?

使用 Postgres 和 Rails 3。

【问题讨论】:

  • 您可以尝试通过生成迁移文件来将索引添加到所有表add_index :users, [:email, :first_name, :last_name] 等等......然后运行迁移
  • 似乎索引已经在表上(当我通过 psql 连接并运行'\d table_name'时)。但由于某种原因,它永远不会被写入 schema.rb 文件。
  • FWIW,我尝试使用 add_index 运行迁移,生成的结果 schema.rb 文件仍然不包含索引。
  • 我假设您已经查看了 config/application.rb、您的初始化程序和您的环境文件中的任何突出的东西?如果没有,你会寻找类似config.active_record.something_about_schema
  • @D-Nice 如果我们能看到架构和迁移,调试起来会更容易。您使用的是 add_index 还是 index: true? index: true 适用于references 和belongs_to 但不适用于add_column。 add_index 通常应该可以工作。您可以分享架构和示例迁移吗?

标签: ruby-on-rails postgresql ruby-on-rails-3 migration


【解决方案1】:

在 Rails 3 中,schema.rb 文件中不显示索引。

以下是 rails 3 文档中的 shema 转储屏幕截图。没有显示索引。

我尝试安装带有 Postgres 的 Rails 3、带有 Mysql 的 Rails 3 以及 Rails 3 和 SQLite。所有索引都添加到数据库中,但您在schema.rb 中看不到它们。

只有一种方法可以在schema.rb 中显示它们,方法是手动向文件添加索引,或者您可以让scehma.rb 不使用索引。当我们运行rake db:migrate 时,所有索引都会添加到数据库中。如果您愿意,您可以升级到 rails 4 或更高版本,您将永远不会遇到这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    相关资源
    最近更新 更多