16

Tôi cần quản lý mức cô lập giao dịch trên cơ sở mỗi giao dịch theo cách di động trên các cơ sở dữ liệu (SQLite, PostgreSQL, MySQL ít nhất).Làm cách nào để đặt mức cách ly giao dịch bằng kết nối ActiveRecord? [giới thiệu một viên ngọc]

Bạn có thể đề xuất một viên đá quý để tăng cường bộ điều hợp kết nối cơ sở dữ liệu ActiveRecord để cho phép điều đó không?

Tôi biết tôi có thể làm điều đó bằng tay, như thế:

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

... nhưng tôi mong chờ một cái gì đó như:

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

Trả lời

18

Chức năng này được hỗ trợ bởi ActiveRecord bản thân:

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

Nó hỗ trợ ANSI cô lập SQL cấp:

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

Phương pháp này có sẵn since Rails 4, không có sẵn khi OP hỏi câu hỏi. Nhưng đối với bất kỳ ứng dụng Rails hiện đại nào thì đây cũng là con đường để đi.

Các vấn đề liên quan