Estimados amigos, se me ha presentado un caso en el que debo actualizar más de una tabla que no están relacionadas por claves, por lo que no me resulta posible utilizar una relación para asegurarme la sincronización del conjunto de tablas.
Dado que el método sincronizar() de cada DT es independiente de los demás, de nada sirve encerrar en un try…catch del php dos o tres sincronizaciones, dado que la falla en una de ellas no deshará las sicronizaciones que la precedieron.
Deseo saber (yo no me avivo) si es posible iniciar una transacción que englobe las sincronizaciones desde toba puro, sin crear una sentencia sql que lo haga a la manera tradicional y usar el método toba::db()->consultar($sql).
Espero no estar preguntando una burrada y que de paso el tema le sirva a otros.
Hola, yo esa situacion la resolvi con el siguiente codigo:
La idea es, tengo que actualizar un registro de la tabla1 y dicho registro guardar en la tabla2 con Atomicidad (transaccion entre las dos operaciones)
Dado que el método sincronizar() de cada DT es independiente de los demás, de nada sirve encerrar en un try...catch del php dos o tres sincronizaciones, dado que la falla en una de ellas no deshará las sicronizaciones que la precedieron.
Eso es cierto, pero lo tendrías que hacer dentro de otra transaccion. Algo como esto:
toba::db()->abrir_transaccion();
try
//acá realizarías tus sincronizaciones
toba::db()->cerrar_transaccion();
catch
toba::db()->abortar_transaccion();
Desde ya, habría que confirmar que este tipo de llamadas sea soportado, es decir, que se permita anidación de transacciones (yo asumo que si, ya que postgresql soporta anidación de transacciones, pero…)
@Martin: No se como sera en las versiones nuevas de Postgres… pero hasta donde yo se transacciones anidadas no soporta, lo que si usabamos nosotros para simularlas eran checkpoints, que son mas versatiles… pero no es lo mismo que una transaccion, hay que hacer un manejo mas explicito.