Bienvenidos a una nueva entrada semanal en el blog de TodoPostgreSQL, tu portal de formación PostgreSQL en español favorito. Esta semana hablaremos de uno de los conceptos más importantes a la hora de hablar de gestores de Bases de Datos; hablaremos de las transacciones en PostgreSQL.
Es fundamental conocer el concepto de transacción en los sistemas gestores de bases de datos, como PostgreSQL. Una transacción empaqueta varios pasos en una operación, de forma que se completen todos o ninguno. Los estados intermedios entre los pasos no son visible para otras transacciones ocurridas en el mismo momento.
En el caso de que ocurra algún fallo que impida que se complete la transacción, ninguno de los pasos se ejecutan y no afectan a los objetos de la base de datos.
Los pasos dentro de una transacción son varias sentencias SQL que deben de completarse todas para que queden registradas. Para comenzar una transacción utilizamos el comando BEGIN. Para indicar al sistema que han terminado correctamente todas las sentencias SQL, utilizamos el comando COMMIT. Hay ocasiones en las que tenemos que desechar algunos de los pasos que se están realizando. Para cancelar la transacción comenzada utilizamos el comando ROLLBACK. Veamos estos comando con ejemplos.
Comando BEGIN
Cuando utilizamos este comando el sistema permite que se ejecuten todas las sentencias SQL que necesitemos y las registra en un fichero. A continuación os dejo un ejemplo donde se comienza una transacción donde deben de completarse satisfactoriamente todas las sentencias.
BEGIN; UPDATE cuentas SET balance = balance - 100.00 WHERE n_cuenta = 0127365; UPDATE cuentas SET balance = balance + 100.00 WHERE n_cuenta = 0795417;
Comando COMMIT
Cuando ejecutamos este comando estamos confirmando que todas las sentencias son correctas. Así pues, hasta que no se ejecute el comando COMMIT, las sentencias no quedarán registradas. Por ejemplo, si cerramos la conexión antes de ejecutar este comando no se verá afectada ninguna de las relaciones de la base de datos. A continuación os dejo un ejemplo en el cual se comienza una transacción, se ejecutan una serie de pasos y confirmamos que todas las sentencias están correctas.
BEGIN; INSERT INTO cuentas (n_cuenta, nombre, balance) VALUES (0679259, 'Pepe', 200); UPDATE cuentas SET balance = balance - 137.00 WHERE nombre = 'Pepe'; UPDATE cuentas SET balance = balance + 137.00 WHERE nombre = 'Juan'; SELECT nombre, balance FROM cuentas WHERE nombre = 'Pepe' AND nombre = 'Juan'; COMMIT;
Comando ROLLBACK
Con este comando podemos desechar las transacciones que se hayan ejecutado. Por lo tanto, después de haber realizado y confirmado una transacción, PostgreSQL nos permite anular dicha transacción de forma que no se modifique los datos de nuestra base de datos. A continuación os dejo un ejemplo donde vamos a anular la transacción confirmada anteriormente.
BEGIN; "SENTENCIAS SQL" COMMIT; ROLLBACK;
Para poder utilizar estos comando mencionados (BEGIN, COMMIT y ROLLBACK) debemos de desactivar el AUTOCOMMIT. Ésta opción es a nivel de cliente y por defecto está activada. De forma que toda sentencia ejecutada queda confirmada y registrada en la base de datos.
Hasta aquí nuestra entrada de transacciones en PostgreSQL. Os esperamos la próxima semana con más conceptos nuevos y curiosidades de nuestro gestor de Bases de Datos favorito.
¡Hasta la próxima!