【问题标题】:rails database migrations using transactions使用事务进行 Rails 数据库迁移
【发布时间】:2016-10-15 16:49:42
【问题描述】:

我刚刚学习 Rails,已经开始了关于数据库迁移的部分。我构建了 2 个迁移,并且都成功迁移。向下迁移,最新的迁移,最先运行的迁移,由于我的代码中的拼写错误而失败。我修正了错字,但之后迁移继续失败。我发现原因是向下迁移在更改中途中止,然后当我尝试再次向下迁移时它失败了,因为已经进行了一些更改,因此列名不同以及其他类似问题。我最终通过摆弄schema_migrations 表并手动将我的更改回滚到以前的版本,然后从那里向上和向下迁移来修复它。

我的问题是,有没有办法告诉 Rails 在事务模式下运行迁移,如果代码失败,不提交事务?

【问题讨论】:

    标签: ruby-on-rails database-migration


    【解决方案1】:

    Rails 已经在事务if your database supports it 中运行您的迁移:

    在支持带有更改架构的语句的事务的数据库上,迁移被包装在事务中。如果数据库不支持这一点,那么当迁移失败时,成功的部分将不会回滚。您将不得不回滚手动进行的更改。

    在执行架构更改时,您可以使用尊重事务的数据库。 MySQL(据我所知)没有,但 Postgres 绝对有。

    【讨论】:

    • 很高兴知道。谢谢。
    • 我正在使用 mariadb,它确实支持事务。在这种情况下它不起作用有什么原因吗?我正在使用 mysql2 连接器。
    • @richbai90 这取决于您在迁移中执行的操作。例如alter table 语句在执行语句之前执行隐式提交。见stackoverflow.com/questions/22806261/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 2017-02-10
    • 2019-12-02
    • 2011-10-12
    • 1970-01-01
    • 2020-04-21
    • 2018-11-26
    相关资源
    最近更新 更多