Please sign in to comment.
Support for specifying transaction isolation level
If your database supports setting the isolation level for a transaction, you can set it like so: Post.transaction(isolation: :serializable) do # ... end Valid isolation levels are: * `:read_uncommitted` * `:read_committed` * `:repeatable_read` * `:serializable` You should consult the documentation for your database to understand the semantics of these different levels: * http://www.postgresql.org/docs/9.1/static/transaction-iso.html * https://dev.mysql.com/doc/refman/5.0/en/set-transaction.html An `ActiveRecord::TransactionIsolationError` will be raised if: * The adapter does not support setting the isolation level * You are joining an existing open transaction * You are creating a nested (savepoint) transaction The mysql, mysql2 and postgresql adapters support setting the transaction isolation level. However, support is disabled for mysql versions below 5, because they are affected by a bug (http://bugs.mysql.com/bug.php?id=39170) which means the isolation level gets persisted outside the transaction.
- Loading branch information
Showing with 263 additions and 15 deletions.
- +35 −0 activerecord/CHANGELOG.md
- +57 −6 activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb
- +18 −9 activerecord/lib/active_record/connection_adapters/abstract/transaction.rb
- +5 −0 activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
- +15 −0 activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
- +5 −0 activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb
- +4 −0 activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
- +3 −0 activerecord/lib/active_record/errors.rb
- +121 −0 activerecord/test/cases/transaction_isolation_test.rb
Oops, something went wrong.