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,
empleados
yauditoria_empleados
. La segunda tabla almacenará los registros de auditoría. - Función del Trigger: La función
registrar_auditoria
inserta un nuevo registro enauditoria_empleados
cada vez que se actualiza un registro enempleados
. - Trigger: El trigger
trigger_auditoria
se 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