16

Necesito administrar el nivel de aislamiento de transacción por transacción de una manera portátil en bases de datos (SQLite, PostgreSQL, MySQL al menos).¿Cómo establecer el nivel de aislamiento de transacción usando la conexión de ActiveRecord? [recomendar una gema]

¿Podría recomendar una gema que mejora los adaptadores de conexión de la base de datos ActiveRecord para permitir eso?

sé que puedo hacerlo de forma manual, al igual que:

User.connection.execute('SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE') 

... pero yo esperaría algo como:

User.isolation_level(:serializable) do 
    # ... 
end 

Respuesta

18

Esta funcionalidad se apoya por sí mismo ActiveRecord:

MyRecord.transaction(isolation: :read_committed) do 
    # do your transaction work 
end 

Es compatible con la norma ANSI niveles de aislamiento SQL:

  • :read_uncommitted
  • :read_committed
  • :repeatable_read
  • :serializable

Este método está disponible since Rails 4, no estaba disponible cuando el OP hizo la pregunta. Pero para cualquier aplicación decente de Rails, este debería ser el camino a seguir.

Cuestiones relacionadas