Una transacción en PostgreSQL posee las siguientes propiedades, conocidas como ACID:
Para manejar transacciones en PostgreSQL, utilizamos los siguientes comandos:
Para ilustrar cómo funcionan las transacciones, crearemos una tabla simple y realizaremos algunas operaciones sobre ella.
-- Crear una tabla de ejemplo
CREATE TABLE Productos (
ProductoID SERIAL PRIMARY KEY,
Nombre VARCHAR(50),
Precio DECIMAL(10, 2)
);
Iniciamos una transacción utilizando BEGIN
.
BEGIN;
Dentro de la transacción, realizamos varias operaciones de manipulación de datos (DML).
-- Insertar registros
INSERT INTO Productos (Nombre, Precio) VALUES ('Producto A', 10.00);
INSERT INTO Productos (Nombre, Precio) VALUES ('Producto B', 20.00);
-- Actualizar un registro
UPDATE Productos SET Precio = 15.00 WHERE Nombre = 'Producto A';
-- Eliminar un registro
DELETE FROM Productos WHERE Nombre = 'Producto B';
Después de realizar las operaciones, podemos validar que todo está correcto y luego confirmar la transacción.
-- Confirmar la transacción
COMMIT;
Es importante manejar errores para asegurar que, en caso de problemas, la transacción pueda ser revertida.
DO $$
BEGIN
-- Iniciar la transacción
BEGIN;
-- Intentar ejecutar las operaciones DML
BEGIN
INSERT INTO Productos (Nombre, Precio) VALUES ('Producto C', 30.00);
UPDATE Productos SET Precio = 25.00 WHERE Nombre = 'Producto C';
-- Confirmar la transacción si todo es exitoso
COMMIT;
EXCEPTION
WHEN OTHERS THEN
-- Si ocurre un error, deshacer la transacción
ROLLBACK;
-- Opcional: Manejar el error, por ejemplo, mostrar un mensaje
RAISE NOTICE 'Error en la transacción: %', SQLERRM;
END;
END $$;
1. DO $$...BEGIN: Inicia un bloque anónimo PL/pgSQL.
2. BEGIN: Inicia la transacción.
3. BEGIN...END: Intenta ejecutar las operaciones dentro del bloque anónimo.
4. EXCEPTION...WHEN OTHERS THEN: Si ocurre un error, captura la excepción.
5. COMMIT: Si todas las operaciones son exitosas, se confirma la transacción.
6. ROLLBACK: Si ocurre un error, se deshacen todas las operaciones realizadas desde el inicio de la transacción.
7. RAISE NOTICE: Imprime un mensaje de error.
Las transacciones son una herramienta poderosa en PostgreSQL para garantizar la integridad y consistencia de los datos. Al agrupar múltiples operaciones en una transacción, podemos asegurar que todas se completen correctamente o ninguna de ellas se aplique, lo cual es fundamental para mantener la coherencia en bases de datos críticas.
Jorge García
Fullstack developer