Avanzado
20 min de lecturaTriggers
Funciones que se ejecutan automáticamente ante eventos en la base de datos
Un TRIGGER es una función que se ejecuta automáticamente cuando ocurre un evento (INSERT, UPDATE, DELETE) en una tabla.
Crear función para trigger
sql
1CREATE OR REPLACE FUNCTION actualizar_fecha_modificacion()2RETURNS TRIGGER AS $$3BEGIN4 NEW.fecha_modificacion = NOW();5 RETURN NEW;6END;7$$ LANGUAGE plpgsql;Crear trigger
sql
1CREATE TRIGGER trigger_actualizar_fecha2 BEFORE UPDATE ON usuarios3 FOR EACH ROW4 EXECUTE FUNCTION actualizar_fecha_modificacion();Tipos de triggers
Ejemplo: Auditoría
sql
1CREATE TABLE auditoria_usuarios (2 id SERIAL PRIMARY KEY,3 usuario_id INT,4 accion TEXT,5 dato_anterior JSONB,6 dato_nuevo JSONB,7 fecha TIMESTAMP DEFAULT NOW()8);9 10CREATE OR REPLACE FUNCTION auditar_usuarios()11RETURNS TRIGGER AS $$12BEGIN13 INSERT INTO auditoria_usuarios (usuario_id, accion, dato_anterior, dato_nuevo)14 VALUES (15 COALESCE(NEW.id, OLD.id),16 TG_OP,17 CASE WHEN TG_OP IN ('UPDATE', 'DELETE') THEN row_to_json(OLD)::jsonb END,18 CASE WHEN TG_OP IN ('INSERT', 'UPDATE') THEN row_to_json(NEW)::jsonb END19 );20 RETURN NEW;21END;22$$ LANGUAGE plpgsql;23 24CREATE TRIGGER trigger_auditoria25 AFTER INSERT OR UPDATE OR DELETE ON usuarios26 FOR EACH ROW27 EXECUTE FUNCTION auditar_usuarios();Sintaxis
Sintaxis
sql
1CREATE [OR REPLACE] TRIGGER nombre_trigger2{BEFORE | AFTER | INSTEAD OF} {INSERT | UPDATE | DELETE}3ON nombre_tabla4[FOR EACH ROW]5EXECUTE FUNCTION nombre_funcion();Ejemplos
Trigger de actualización
Actualizar fecha_modificacion automáticamente
Ejemplo
sql
1-- Función2CREATE OR REPLACE FUNCTION set_fecha_mod()3RETURNS TRIGGER AS $$4BEGIN5 NEW.fecha_modificacion = NOW();6 RETURN NEW;7END;8$$ LANGUAGE plpgsql;9 10-- Trigger11CREATE TRIGGER trg_set_fecha12 BEFORE UPDATE ON usuarios13 FOR EACH ROW14 EXECUTE FUNCTION set_fecha_mod();Resultado:
CREATE TRIGGER