Transacciones anidadas

Hola, ¿como estan ?
Quería saber si se puede , y si es así , si puede traerme algún problema anidar transacciones.
Es decir, tengo dos métodos que cada uno abre su propia transaccion, necesito ejecutar uno tras otro y quiero que toda la operación falle si alguno de ellos falla.
Saludos y gracias desde ya.

Ej;


  toba::db()->abrir_transaccion() ; 
  try {
      metodo1() ; 
      metodo2() ; 
      toba::db()->cerrar_transaccion() ; 
  } catch (... ) {
      toba::db()->abortar_transaccion() ; 
  }


function metodo1()
{ 
  toba::db()->abrir_transaccion() ; 
  try {
      // ... 
      toba::db()->cerrar_transaccion() ; 
  } catch (... ) {
      toba::db()->abortar_transaccion() ; 
  }
}

function metodo2()
{ 
  toba::db()->abrir_transaccion() ; 
  try {
      // ... 
      toba::db()->cerrar_transaccion() ; 
  } catch (... ) {
      toba::db()->abortar_transaccion() ; 
  }
}

 

Hola Daniel,

en postgres no se pueden anidar transacciones, lo que podes hacer si necesitas realizar commits o rollbacks parciales es usar SAVEPOINTs… pero si abris una transaccion dentro de otra, se palma.

Por lo tanto, te diria que te conviene sacar las transacciones fuera de los metodos o crearte un tercero que haga la suma de los 2.

Saludos