16

मुझे पोर्टेबल डेटाबेस (SQLite, PostgreSQL, MySQL कम से कम) में प्रति लेनदेन आधार पर लेनदेन अलगाव स्तर का प्रबंधन करने की आवश्यकता है।ActiveRecord कनेक्शन का उपयोग कर लेनदेन अलगाव स्तर कैसे सेट करें? [एक मणि की सिफारिश करें]

क्या आप मणि की सिफारिश कर सकते हैं जो इसे अनुमति देने के लिए ActiveRecord डेटाबेस कनेक्शन एडेप्टर को बढ़ाता है?

मैं जानता हूँ कि मैं इसे मैन्युअल रूप से कर सकते हैं, इस तरह:

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

... लेकिन कुछ की तरह मैं उम्मीद करेंगे:

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

उत्तर

18

यह कार्यक्षमता ActiveRecord ही द्वारा समर्थित है:

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

यह समर्थन करता है, ANSI SQL अलगाव का स्तर:

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

यह विधि since Rails 4 उपलब्ध है, ओपी ने सवाल पूछा जब यह अनुपलब्ध था। लेकिन किसी भी साधारण आधुनिक रेल आवेदन के लिए यह जाने का रास्ता होना चाहिए।

संबंधित मुद्दे