【问题标题】:Is it safe to reorder columns in schema.rb for Rails 4/Postgres?为 Rails 4/Postgres 重新排序 schema.rb 中的列是否安全?
【发布时间】:2015-10-19 09:54:18
【问题描述】:

在开发和生产中使用 Postgres 9.4 运行 Rails 4。我有一张随着时间的推移随着迁移而增长的大表。由于表上有许多不同的列,我想重新排序,以便更合理地对列进行分组。换句话说,一些列元素会根据它们捕获的信息自然地组合在一起。

我在stack overflow discussion 找到了关于在迁移中使用after: 对列重新排序(在SQL 中使用ALTER TABLE)的讨论。然后我继续设置迁移来做到这一点。运行迁移后,我注意到我的 schema.rb 文件没有改变。查看数据库中的列(postgres on development),那里也没有任何变化。

进一步的研究使我找到了Postgres wiki,它指出目前不支持在 Postgres 中更改列位置。

这不是关键任务,但它会让生活更轻松。我的问题是:

  1. 如果我只是将schema.rb 文件中的行向上或向下移动以便根据需要定位它们,这会导致任何问题吗?由于我希望使用 rake db:schema:load 来配置任何新数据库,因此这似乎不会破坏任何东西。此外,由于之前的迁移没有实质性改变(只是它们输出到 schema.rb 的列的顺序),所以一切都应该在内部保持一致,不是吗?

  2. 1234563李>

我的假设是,当我使用种子数据从头开始重建生产数据库时,它将使用架构结构以所需的顺序正确创建表。现在它不是一个真正的、为最终用户部署的数据库,所以这似乎不是一个问题。使用上面的选项 #1 似乎是最简单的解决方案,只要它不会破坏任何东西。

【问题讨论】:

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


    【解决方案1】:

    作为一种解决方法,您可以使用 annotate 在代码中记录您的模型,然后在此处重新排序创建的注释。

    当然,一旦你再次运行它,它可能会被 annotate 覆盖。如果您查看表结构,它只会让您的生活更轻松,但如果您在数据库中使用SELECT * 手动运行 SQL 查询,它将无济于事。

    【讨论】:

      【解决方案2】:

      很多刚接触 postgresql 的人经常问它是否支持修改 表中的列位置。 目前没有如果你想 更改列位置,您必须重新创建表,或添加 新列和移动数据。 允许对列重新排序的想法 立场不是 postgresql 开发人员反对的立场之一,而是更多 没有人上前做这项工作的案例。

      ref

      • 如果我只是向上或向下移动 schema.rb 文件中的行,以便 根据需要放置它们,这会导致任何问题吗?

      没有。它对PG 中的列顺序没有任何作用。

      • 如果这是个坏主意,我是否可以简单地回到早期的迁移,将 after: :some_column 的语法添加到每个列元素,以便正确设置 schema.rb 文件?

      如果您使用PGafter: :some_column 选项对列顺序没有任何作用

      【讨论】:

        【解决方案3】:

        列的顺序对于 Ruby 或 Rails 来说并不重要。

        至于它对您编写的任何代码是否重要,只有您和您的测试可以回答这个问题。如果您只使用 ActiveRecord 而没有执行任何引用列号的直接 SQL,那么您应该没问题。

        【讨论】:

        • 谢谢兰斯。我知道顺序对应用程序无关紧要。重新排序更便于我自己的湿件处理。将一些列组合在一起很有帮助,这样我可以更轻松地了解它们之间的关系。不要认为有办法用 Postgres 做到这一点......
        • 不适用于现有表。您始终可以创建一个视图以按特定顺序查看您的数据。
        • 如果您有一个包含列 a、b、d、c 的表 t,那么您可以执行以下操作:从 t 中选择 a、b、c、d 到 t2。然后将 t2 重命名为 t。那是如果您可以断开与数据库的当前条目。
        • 我不认为这是对 OP 问题的回答。这是一条评论。
        • 另一个需要重新排序列的原因是在 Rails 控制台中的记录显示以逻辑顺序打印字段(例如,Rails 控制台中的Event.first)。
        猜你喜欢
        • 2012-07-03
        • 2013-09-24
        • 1970-01-01
        • 2015-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多