Volver a la página principal
miércoles 17 julio 2024
124

Cómo Crear un Script de Transacción en PostgreSQL

Conceptos Básicos de las Transacciones

Una transacción en PostgreSQL posee las siguientes propiedades, conocidas como ACID:

  • Atomicidad: Todas las operaciones dentro de la transacción se completan con éxito o ninguna de ellas se aplica.
  • Consistencia: La transacción lleva la base de datos de un estado consistente a otro estado consistente.
  • Aislamiento: Las operaciones dentro de una transacción están aisladas de otras transacciones hasta que la transacción se completa.
  • Durabilidad: Una vez que una transacción se ha confirmado (commit), sus cambios persisten incluso si ocurre una falla del sistema.

Comandos Básicos

Para manejar transacciones en PostgreSQL, utilizamos los siguientes comandos:

  • BEGIN: Inicia una nueva transacción.
  • COMMIT: Confirma la transacción, haciendo permanentes todos los cambios realizados.
  • ROLLBACK: Deshace todos los cambios realizados desde el inicio de la transacción.

Creación de un Script de Transacción

Paso 1: Preparar el Entorno

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)
);

Paso 2: Iniciar una Transacción

Iniciamos una transacción utilizando BEGIN.

BEGIN;

Paso 3: Realizar Operaciones DML

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';

Paso 4: Validar y Confirmar la Transacción

Después de realizar las operaciones, podemos validar que todo está correcto y luego confirmar la transacción.

-- Confirmar la transacción
COMMIT;

Manejo de Errores y Deshacer la Transacción

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 $$;

Explicación del Script

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.

Conclusión

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.

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer