PostgreSQL: Sentencias TCL

Este es el Post #14 del Topic: Guía Práctica de PostgreSQL

El Lenguaje de Control Transacciones  (Transaction Control LanguageTCL) se utilizan para administrar los  procesos transaccionales en una base de datos en relación a los requerimientos de atomicidad, cosistencia, aislamiento y durabilidad.

Las clásulas TCL que se utilizan en PostgreSQL para este fin son:

COMMIT
ROLLBACK
SAVEPOINT

En este post describiremos las maneras de llevar a cabo el control de errores ayudándonos de Error Codes donde podemos ver las variables de errores que necesitaremos.

Al igual que la mayoria de casos prácticos que estoy desarrollando bajo postgres, éste también fue tomado de mi curso de base de datos (en SQLServer) desarrollados en la universiadad.

CASO PRÁCTICO:

Transacción para transferir 50 € desde una cuenta A a una cuenta B:

1- CREACIÓN DE TABLA Y CHECK:

--DROP TABLE tblCuenta;
CREATE TABLE tblCuenta(NumCuenta char,Monto numeric(10,3));
INSERT INTO tblCuenta VALUES('A',100);
INSERT INTO tblCuenta VALUES('B',100);
ALTER TABLE tblCuenta
ADD CONSTRAINT ck_monto CHECK (Monto >=0); --No Negativos

2- SECUENCIA DE EJECUCIÓN:

–1. leer(A)
–2. A = A – 50
–3. escribir(A)
–4. leer(B)
–5. B = B + 50
–6. escribir(B)

3- CREACIÓN DE LA FUNCIÓN:

CREATE OR REPLACE FUNCTION transaccion1() RETURNS VOID AS
$body$
DECLARE
 A numeric;
 B numeric;
BEGIN
 /*1*/A := (SELECT monto from tblCuenta where NumCuenta = 'A');
 /*2*/A := A - 50;
 /*3*/update tblCuenta set Monto = A where NumCuenta = 'A';
 /*4*/B := (SELECT monto from tblCuenta where NumCuenta = 'B');
 /*5*/B := B + 50;
 /*6*/update tblCuenta set Monto = B where NumCuenta = 'B';
 RAISE NOTICE 'Guardado';
EXCEPTION
WHEN OTHERS THEN
  ROLLBACK;
END;
$body$
LANGUAGE 'plpgsql';

4- COMPROBANDO:

SELECT * FROM transaccion1();
SELECT * FROM tblCuenta;

EL hecho de transferir dinero de una cuenta a otra requiere que toda la operación sea ejecutado como un todo, decía mi profe ‘HACE TODO O NADA’, de esa manera garantizamos la integridad de la transacción, por ejemplo si se presenta un error en medio de la transferencia todo el procesos queda invalidado.

Queda claro que Postgres realiza las transacciones implicitamente

Es importante nombrar los 4 requisitos que deben de cumplirse en un transferencia:

Requisito de atomicidad: Se realiza todo o nada

Requisito de consistencia: A+B (INICIAL) = A+B (FINAL)

Requisito de aislamiento: Durante la operacion se bloquea otros accesos.

Requisito de durabilidad: Una vez actualizado debe quedar permanentemente.

RAISE NOTICE 'Monto Insuficiente';

2 thoughts on “PostgreSQL: Sentencias TCL

  1. para mi gusto a este tema le hace falta mas detalle y/o mas ejemplos practicos para validar y pasar mejor lo prendido, mil gracias

Deja un comentario