postgresql 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