Transacciones en Postgresql

TRANSACCIONES EN POSTGRESQL BEGIN : Comienza la transaccion RollBack: Retrocede la transaccion por cualquier error COMM

Views 98 Downloads 0 File size 60KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

TRANSACCIONES EN POSTGRESQL

BEGIN : Comienza la transaccion RollBack: Retrocede la transaccion por cualquier error COMMIT: Finaliza la transaccion hasta creo que es asi. ejemplo: BEGIN; UPDATE accounts SET balance = balance - 100.00 WHERE name = 'Alice'; SAVEPOINT my_savepoint; UPDATE accounts SET balance = balance + 100.00 WHERE name = 'Bob'; -- oops ... forget that and use Wally's account ROLLBACK TO my_savepoint; UPDATE accounts SET balance = balance + 100.00 WHERE name = 'Wally'; COMMIT; hay una funcion que se llama SAVEPOINT me imagino que es "guardar punto", esto hay que colocarlo cada vez que se hace una consulta, actualizacion, o inserccion, por que aca solo lo muestra en un solo lado, ahh y tambien hay que colocar el rollback la cantidad de veces que ponemos los savepoint??

Imagina que administras una base de datos de millones de datos. Un update a un campo te puede dañar toda la información sin posibilidad de recuperarla. Para hacer cambios a la base de datos se debe ser muy cuidadoso y tener las herramientas para recuperarse de posibles daños. Lo que dices es exactamente lo que es. begin; Es el inicio de una transacción. Con solo poner esta clausula es posible recuperar errores que puedas sufrir. savepoint; Con esta sentencia haces un commit hasta el punto que estes seguro no tienes errores. La diferencia con commit es que no se finaliza la transacción. rollback; Deshace todos los cambios que se hayan realizado desde la sentencia begin. o hasta donde hayas confirmado con savepoint. commit; Confirma y termina la transacción con los cambios establecidos. Con un ejemplo: Código sql: Ver originalCopiar

1. 2.

pruebas=> SELECT *FROM producto; id | descr

3.

----+-------------

4.

1 | hoja

5.

2 | hoja carta

6.

3 | hoja oficio

7.

4 | lapicero

8.

(4 filas)

9. 10. pruebas=> begin; 11. BEGIN 12. pruebas=> UPDATE producto SET descr=REPLACE(descr,'hoja','papel'); 13. UPDATE 4

14. pruebas=> 15.

id |

SELECT *FROM producto;

descr

16. ----+-------------17.

1 | papel

18.

2 | papel carta

19.

3 | papel oficio

20.

4 | lapicero

21. (4 filas)

Hemos cambiado la palabra hoja por papel. Todo anda muy bien. Entonces vamos a confirmar hasta este punto que todo va bien haciendo uso de savepint. Código sql: Ver originalCopiar

1. 2.

pruebas=> savepoint a; SAVEPOINT

3.

pruebas=> UPDATE producto SET descr=REPLACE(descr,'lapicero','boligrafo');

4.

UPDATE 4

5.

pruebas=>

6. 7.

id |

SELECT *FROM producto;

descr

----+--------------

8.

1 | papel

9.

2 | papel carta

10.

3 | papel oficio

11.

4 | boligrafo

12. (4 filas)

Mierda!!! no era bolígrafo sino pluma. Debemos deshacer todos los cambios!!!. Pero si ya tenia todo bueno hasta aca y no quiero volver a empezar. Utilizamos savepoint para deshacer los cambios hasta ese punto. Código sql: Ver originalCopiar

1. 2.

pruebas=> rollback TO a; ROLLBACK

3.

pruebas=>

4. 5. 6.

id |

SELECT *FROM producto;

descr

----+-------------1 | papel

7.

2 | papel carta

8.

3 | papel oficio

9.

4 | lapicero

10. (4 filas)

Mira que el cambio de hoja a papel se conserva y solo se recupera la palabra lapicero. Corregimos el error. Código sql: Ver originalCopiar

1. 2.

pruebas=> UPDATE producto SET descr=REPLACE(descr,'lapicero','pluma'); UPDATE 4

ahora todo está bien. Solo nos queda confirmar la terminación de la transacción y terminarla. Código sql: Ver originalCopiar

1. 2.

pruebas=> commit; COMMIT

3.

pruebas=>

4. 5.

id |

SELECT *FROM producto;

descr

----+--------------

6.

1 | papel

7.

2 | papel carta

8.

3 | papel oficio

9.

4 | pluma

10. (4 filas)