Anyone found an elegant way to do the following in rails with postgresql? I can grab the underlying connection handle and use it directly, but I'd rather find a better way.
1. Two phase commit 2. Setting isolation level on transactions
Anyone found an elegant way to do the following in rails with postgresql? I can grab the underlying connection handle and use it directly, but I'd rather find a better way.
1. Two phase commit 2. Setting isolation level on transactions
snacktime wrote:
Anyone found an elegant way to do the following in rails with postgresql? 1. Two phase commit 2. Setting isolation level on transactions
No, ActiveRecord does not support any of them. But if you need them often you can write a plugin (and share it, so others that need this functionality will be grateful).
Sava Chankov wrote the following on 14.02.2007 14:37 :
snacktime wrote:
Anyone found an elegant way to do the following in rails with postgresql? 1. Two phase commit 2. Setting isolation level on transactions No, ActiveRecord does not support any of them. But if you need them often you can write a plugin (and share it, so others that need this functionality will be grateful).
And this is quite easy to do, here's a quick hack for serializable connections (not tested with actual *objects) I use extensively for account credit management in one of my projects.
lib/serialized_transactions.rb (to include in environment.rb or put in a plugin)
# This library extends the ActiveRecord::Base class # to provide transactions with SERIALIZABLE isolation # level class ActiveRecord::Base # This is a transaction in serialized mode def self.serialized_transaction(*objects, &block) serial_sql = 'SET TRANSACTION ISOLATION LEVEL SERIALIZABLE' # pass a modified block to the original transaction method self.transaction(*objects) { # Serialize on this connection connection.execute(serial_sql) objects.each { |o| # Serialize on each object connection if any o.connection.execute(serial_sql) } block.call } end end