diff -ur DBIx-Class-0.08196/lib/DBIx/Class/Schema.pm DBIx-Class-0.08196-docpatch/lib/DBIx/Class/Schema.pm
--- DBIx-Class-0.08196/lib/DBIx/Class/Schema.pm	2011-11-29 05:15:48.000000000 +0000
+++ DBIx-Class-0.08196-docpatch/lib/DBIx/Class/Schema.pm	2012-05-21 15:32:49.000000000 +0100
@@ -649,6 +649,33 @@
 
 Connecting with C<< AutoCommit => 1 >> is recommended.
 
+Using nested calls of txn_do as outlined below, it is possible to
+defer exceptions (e.g. from which a temporary recovery might be
+possible) until the end of the transaction.
+
+  package My::Schema;
+  # ...
+  sub txn_do_deferred {
+    my ($self, $coderef, @args) = @_;
+    my $retval;
+    $self->txn_do( sub {
+  		   $self->{deferred_exceptions} = [];
+  		   $retval = $self->txn_do($coderef, @args);
+  		   if (@{$self->{deferred_exceptions}}) {
+  		     warn "The following deferred exceptions were encountered:\n  ".
+  		       join("\n  ", @{$self->{deferred_exceptions}})."\nRolling back...\n";
+  		     $self->txn_rollback();
+  		   }
+  		 }
+  	       );
+    return $retval;
+  }
+  
+  sub defer_exception {
+    my ($self, $msg) = @_;
+    push @{$self->{deferred_exceptions}}, $msg;
+  }
+
 =cut
 
 sub txn_do {
