你什么时候想在 Rails 中使用 disable_ddl_transaction ?

man*_*in1 13 migration ruby-on-rails

我的理解是所有迁移都包含在一个事务中,这意味着,如果对 1 行进行更改,例如添加 null: false,在表中失败,则其他每一行都将失败。你什么时候不希望这种情况发生disable_ddl_transaction

Tha*_*anh 14

默认情况下,所有迁移都包含在事务中,以便在失败时可以回滚。

disable_ddl_transaction当你想做一些不能在事务中执行的事情时需要使用。例如,您可以检查迁移文档的Transactional Migrations部分。

  • 我想到的一个例子是在 PGSQL 中添加自定义/用户定义的枚举。它们无法在事务中定义,因此通过 Rails 迁移添加它们需要在加载类时调用“disable_ddl_transaction!”,然后调用“#up”方法。 (3认同)

Žar*_*vić 7

当您想要使用并发(算法)方法在大型表上添加索引时(这可以防止在添加索引时表被锁定),您需要这样做,disable_ddl_transaction因为并发方法无法在事务内执行。请在此处查找更多详细信息。