【问题标题】:rails database structure idempotent?rails数据库结构幂等?
【发布时间】:2017-04-04 15:34:55
【问题描述】:

幂等这个词的用法可能不正确......但请听我说完。

Rails 数据库迁移是否可以更改数据库中列的顺序?我知道 Rails 迁移允许您将数据库达到最终预期状态,因为您从初始状态迁移但说您正在设置新机器或其他东西 - 您是否希望具有相同的状态,包括列订购?

编辑:

这个问题不是基于我想做的事情,而是更多地基于预测变化。我有一个现有的应用程序,我想预测我是否在他们的机器上设置了另一个用户,他们是否将具有我在主机上的确切列顺序,以及该主机是否从一个状态迁移到另一个状态,排序不会改变。新机器上的订购会改变吗?好像是这样的。

【问题讨论】:

  • 你是什么意思,“列排序”?磁盘上文件中列的物理顺序?有关系吗?
  • 为什么要进行没有标头的数据转储?依赖(隐式)列顺序往往效果不佳。如果迁移以不同的顺序应用(例如,当两个分支将列添加到同一个表时),则在不同环境中的顺序可能不同。您最好以所需的顺序明确列出列或从相关查询中读取列;如果您要转储数据,请在数据中包含列名。

标签: ruby-on-rails database activerecord


【解决方案1】:

列排序取决于数据库,因此没有可用于重新排序列的 Rails 迁移助手。但是,根据您的数据库,您可能能够直接执行特定于数据库的 SQL 来重新排序列。

我相信此更改将反映在您的 schema.rb 文件中——该文件旨在作为数据库的规范状态,以及应从哪些新应用实例引导——但我不会指望它,因为列顺序对 Rails 无关紧要,因此可能会或可能不会按您的预期保留。如果您想绝对确定您的结构完全保留,请改用structure.sql

编辑:为了解决 OP 的编辑问题,如果用户使用完全相同的步骤来引导数据库(例如 db:migrate:resetdb:reset db:migrate 可能会产生结果不同)。如果您使用structure.sql,则两个用户都应该能够使用db:reset db:migrate 并获得相同的结果。

但是,请记住,数据库理论将行称为“元组”,因为诸如“表中列的顺序”之类的东西对逻辑操作绝对没有影响。当然不要编写任何依赖于特定列顺序的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 2018-02-27
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    相关资源
    最近更新 更多