为Rails 4 / Postgres重新排序schema.rb中的列是否安全?

时间:2015-07-28 17:21:50

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

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

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

进一步的研究使我进入Postgres wiki,其中指出目前不支持改变Postgres中的柱位置。

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

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

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

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

3 个答案:

答案 0 :(得分:6)

  

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

ref

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

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

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

PG选项对列顺序不执行任何操作

答案 1 :(得分:1)

列的顺序与Ruby或Rails无关。

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

答案 2 :(得分:0)

作为一种变通方法,您可以使用annotate在代码中记录模型,然后在那里重新排序已创建的评论。

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