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
- Tablas: Creamos dos tablas,
empleadosyauditoria_empleados. La segunda tabla almacenará los registros de auditoría. - Función del Trigger: La función
registrar_auditoriainserta un nuevo registro enauditoria_empleadoscada vez que se actualiza un registro enempleados. - Trigger: El trigger
trigger_auditoriase ejecuta después de cada actualización en la tablaempleados.
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
- 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
);- 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;- 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
- 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
);- 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;- 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
- Creando Bases de Datos y Tablas
- Insertando Datos
- Consultando Datos
- Actualizando Datos
- Eliminando Datos
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
- Optimización de Consultas
- Estrategias de Indexación
- Análisis del Rendimiento de Consultas
- Vacuuming y Mantenimiento
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
- PostGIS para Datos Geoespaciales
- Búsqueda de Texto Completo
- Wrappers de Datos Externos
- PL/pgSQL y Otros Lenguajes Procedurales
