Introducción a los Triggers

Los triggers (o disparadores) en PostgreSQL son funciones que se ejecutan automáticamente en respuesta a ciertos eventos en una tabla o vista. Estos eventos pueden ser operaciones de inserción, actualización o eliminación. Los triggers son útiles para mantener la integridad de los datos, realizar auditorías, y automatizar tareas repetitivas.

Conceptos Clave

  • Evento: La operación que activa el trigger (INSERT, UPDATE, DELETE).
  • Condición: La situación específica bajo la cual se ejecuta el trigger.
  • Acción: El código que se ejecuta cuando se cumple la condición del trigger.
  • Momento: El momento en que se ejecuta el trigger (BEFORE o AFTER).

Tipos de Triggers

  • BEFORE: Se ejecuta antes de que la operación se realice.
  • AFTER: Se ejecuta después de que la operación se haya completado.
  • INSTEAD OF: Se utiliza principalmente con vistas para reemplazar la operación original.

Creación de Triggers

Para crear un trigger en PostgreSQL, necesitas definir una función que contenga la lógica del trigger y luego asociar esa función con un evento en una tabla.

Ejemplo Práctico

Supongamos que tenemos una tabla empleados y queremos mantener un registro de todas las actualizaciones en una tabla de auditoría llamada auditoria_empleados.

Paso 1: Crear las Tablas

CREATE TABLE empleados (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(100),
    salario NUMERIC
);

CREATE TABLE auditoria_empleados (
    id SERIAL PRIMARY KEY,
    empleado_id INT,
    nombre_viejo VARCHAR(100),
    nombre_nuevo VARCHAR(100),
    salario_viejo NUMERIC,
    salario_nuevo NUMERIC,
    fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Paso 2: Crear la Función del Trigger

CREATE OR REPLACE FUNCTION registrar_auditoria() RETURNS TRIGGER AS $$
BEGIN
    INSERT INTO auditoria_empleados (empleado_id, nombre_viejo, nombre_nuevo, salario_viejo, salario_nuevo)
    VALUES (OLD.id, OLD.nombre, NEW.nombre, OLD.salario, NEW.salario);
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

Paso 3: Crear el Trigger

CREATE TRIGGER trigger_auditoria
AFTER UPDATE ON empleados
FOR EACH ROW
EXECUTE FUNCTION registrar_auditoria();

Explicación del Código

  1. Tablas: Creamos dos tablas, empleados y auditoria_empleados. La segunda tabla almacenará los registros de auditoría.
  2. Función del Trigger: La función registrar_auditoria inserta un nuevo registro en auditoria_empleados cada vez que se actualiza un registro en empleados.
  3. Trigger: El trigger trigger_auditoria se ejecuta después de cada actualización en la tabla empleados.

Ejercicio Práctico

Ejercicio 1: Crear un Trigger para INSERT

Crea un trigger que registre cada inserción en la tabla empleados en una tabla de auditoría llamada auditoria_inserciones.

Solución

  1. Crear la Tabla de Auditoría
CREATE TABLE auditoria_inserciones (
    id SERIAL PRIMARY KEY,
    empleado_id INT,
    nombre VARCHAR(100),
    salario NUMERIC,
    fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
  1. Crear la Función del Trigger
CREATE OR REPLACE FUNCTION registrar_insercion() RETURNS TRIGGER AS $$
BEGIN
    INSERT INTO auditoria_inserciones (empleado_id, nombre, salario)
    VALUES (NEW.id, NEW.nombre, NEW.salario);
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;
  1. Crear el Trigger
CREATE TRIGGER trigger_insercion
AFTER INSERT ON empleados
FOR EACH ROW
EXECUTE FUNCTION registrar_insercion();

Ejercicio 2: Crear un Trigger para DELETE

Crea un trigger que registre cada eliminación en la tabla empleados en una tabla de auditoría llamada auditoria_eliminaciones.

Solución

  1. Crear la Tabla de Auditoría
CREATE TABLE auditoria_eliminaciones (
    id SERIAL PRIMARY KEY,
    empleado_id INT,
    nombre VARCHAR(100),
    salario NUMERIC,
    fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
  1. Crear la Función del Trigger
CREATE OR REPLACE FUNCTION registrar_eliminacion() RETURNS TRIGGER AS $$
BEGIN
    INSERT INTO auditoria_eliminaciones (empleado_id, nombre, salario)
    VALUES (OLD.id, OLD.nombre, OLD.salario);
    RETURN OLD;
END;
$$ LANGUAGE plpgsql;
  1. Crear el Trigger
CREATE TRIGGER trigger_eliminacion
AFTER DELETE ON empleados
FOR EACH ROW
EXECUTE FUNCTION registrar_eliminacion();

Conclusión

Los triggers son una herramienta poderosa en PostgreSQL para automatizar tareas y mantener la integridad de los datos. En este módulo, aprendiste cómo crear y utilizar triggers para registrar cambios en las tablas. Practica creando tus propios triggers para diferentes escenarios y observa cómo pueden simplificar la gestión de tu base de datos.

En el próximo módulo, exploraremos las Transacciones y Concurrencia, donde aprenderás cómo manejar múltiples operaciones de manera segura y eficiente.

Curso de PostgreSQL

Módulo 1: Introducción a PostgreSQL

Módulo 2: Operaciones Básicas de SQL

Módulo 3: Consultas Avanzadas de SQL

Módulo 4: Diseño de Bases de Datos y Normalización

Módulo 5: Características Avanzadas de PostgreSQL

Módulo 6: Ajuste de Rendimiento y Optimización

Módulo 7: Seguridad y Gestión de Usuarios

Módulo 8: Trabajando con JSON y Características NoSQL

Módulo 9: Extensiones y Herramientas Avanzadas

Módulo 10: Estudios de Caso y Aplicaciones del Mundo Real

© Copyright 2024. Todos los derechos reservados