TRANSACCIONES EN POSTGRESQL BEGIN : Comienza la transaccion RollBack: Retrocede la transaccion por cualquier error COMM
Views 98 Downloads 0 File size 60KB
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)