我需要在数据库中以可移植的方式管理每个事务的事务隔离级别(至少SQLite,PostgreSQL,MySQL)。
你能推荐一个 gem ,它可以增强ActiveRecord数据库连接适配器吗?
我知道我可以手动执行此操作:
User.connection.execute('SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE')
......但我会期待类似的事情:
User.isolation_level( :serializable ) do
# ...
end
答案 0 :(得分:25)
ActiveRecord本身支持此功能:
MyRecord.transaction(isolation: :read_committed) do
# do your transaction work
end
它支持ANSI SQL隔离级别:
:read_uncommitted
:read_committed
:repeatable_read
:serializable
此方法可用since Rails 4,当OP提出问题时,该方法无效。但对于任何体面的现代Rails应用程序,这应该是可行的方法。
答案 1 :(得分:12)
没有可用的宝石所以我开发了一个(MIT):https://github.com/qertoip/transaction_isolation
答案 2 :(得分:12)
看起来Rails4将具有开箱即用的功能:
https://github.com/rails/rails/commit/392eeecc11a291e406db927a18b75f41b2658253