Los desencadenantes en PostgreSQL son funciones que se ejecutan automáticamente en respuesta a eventos específicos en una tabla, como INSERTAR, ACTUALIZAR o ELIMINAR. Un activador "ANTES" se dispara antes de que se produzca el evento, lo que te permite modificar los datos o aplicar restricciones antes de que se consignen los cambios en los datos.
Utilización Los activadores `BEFORE` se utilizan para validar o modificar datos antes de que se inserten, actualicen o eliminen en una tabla. Suelen emplearse para aplicar reglas de negocio, validar la integridad de los datos o actualizar campos automáticamente.
sql
CREATETRIGGER trigger_name
BEFOREINSERTORUPDATEORDELETEON table_name
FOREACHROWEXECUTEFUNCTIONfunction_name();Con la tecnología de
En esta sintaxis, la palabra clave "ANTES" especifica que el activador debe activarse antes de que se produzca el evento o eventos especificados. Los activadores "ANTES" difieren de los activadores "DESPUÉS", ya que los activadores "ANTES" se ejecutan antes del evento, lo que permite manipular los datos antes de que finalice la transacción.
Ejemplos
1. Activador básico ANTES DE INSERTAR
sql
CREATEORREPLACEFUNCTIONcheck_positive_salary()RETURNSTRIGGERAS $$
BEGINIFNEW.salary <0THENRAISEEXCEPTION'Salary cannot be negative';ENDIF;RETURNNEW;END;
$$ LANGUAGE plpgsql;CREATETRIGGER check_salary_trigger
BEFOREINSERTON employees
FOREACHROWEXECUTEFUNCTIONcheck_positive_salary();Con la tecnología de
Este ejemplo crea un disparador que comprueba si el `salario` es positivo antes de insertar una nueva fila en la tabla `empleados`.
2. Disparador ANTES DE ACTUALIZAR para registrar cambios
sql
CREATEORREPLACEFUNCTIONlog_update()RETURNSTRIGGERAS $$
BEGININSERTINTOemployees_audit(employee_id, old_salary, new_salary, changed_on)VALUES(OLD.id,OLD.salary,NEW.salary,CURRENT_TIMESTAMP);RETURNNEW;END;
$$ LANGUAGE plpgsql;CREATETRIGGER log_update_trigger
BEFOREUPDATEON employees
FOREACHROWEXECUTEFUNCTIONlog_update();Con la tecnología de
Aquí, un activador registra los cambios en el campo "salario" de una tabla "auditoría_empleados" antes de que se produzca una actualización.
3. Activador ANTES DE ELIMINAR para acciones en cascada
sql
CREATEORREPLACEFUNCTIONprevent_deletion()RETURNSTRIGGERAS $$
BEGINIFEXISTS(SELECT1FROM orders WHERE orders.employee_id =OLD.id)THENRAISEEXCEPTION'Employee cannot be deleted, related orders exist';ENDIF;RETURNOLD;END;
$$ LANGUAGE plpgsql;CREATETRIGGER prevent_deletion_trigger
BEFOREDELETEON employees
FOREACHROWEXECUTEFUNCTIONprevent_deletion();Con la tecnología de
Este activador impide eliminar a un empleado si existen pedidos relacionados en la tabla "Pedidos".
Consejos y buenas prácticas
Utiliza nombres de activadores descriptivos. Esto mejora la legibilidad y el mantenimiento, dejando claro para qué sirve cada activador.
Simplifica las funciones de activación. Una lógica compleja puede provocar problemas de rendimiento y es más difícil de depurar.
Prueba a fondo. Asegúrate de que los activadores se comportan como se espera en todos los escenarios para evitar problemas de integridad de los datos.
Activadores de documentos. Documenta claramente el propósito y la lógica de cada activación para futuras referencias y colaboración en equipo.
Considera el impacto en el rendimiento. Los desencadenantes pueden afectar al rendimiento; utilízalos con criterio, especialmente en tablas grandes o en operaciones frecuentes.
Comprende el comportamiento de las transacciones. Los activadores "ANTES" se ejecutan dentro de la transacción que los disparó, y los cambios pueden revertirse si la transacción falla.
Devuelve la fila correcta. Devuelve siempre `NEW` u `OLD` apropiadamente para asegurar que el activador funciona correctamente.
Desactivar temporalmente los activadores. Puedes desactivar los activadores durante operaciones masivas o tareas de mantenimiento utilizando `ALTER TABLE nombre_tabla DISABLE TRIGGER nombre_activador;` y volver a activarlos con `ALTER TABLE nombre_tabla ENABLE TRIGGER nombre_activador;`.
Los desencadenantes en PostgreSQL son funciones que se ejecutan automáticamente en respuesta a eventos específicos en una tabla, como INSERTAR, ACTUALIZAR o ELIMINAR. Un activador "ANTES" se dispara antes de que se produzca el evento, lo que te permite modificar los datos o aplicar restricciones antes de que se consignen los cambios en los datos.
Utilización
Los activadores `BEFORE` se utilizan para validar o modificar datos antes de que se inserten, actualicen o eliminen en una tabla. Suelen emplearse para aplicar reglas de negocio, validar la integridad de los datos o actualizar campos automáticamente.
En esta sintaxis, la palabra clave "ANTES" especifica que el activador debe activarse antes de que se produzca el evento o eventos especificados. Los activadores "ANTES" difieren de los activadores "DESPUÉS", ya que los activadores "ANTES" se ejecutan antes del evento, lo que permite manipular los datos antes de que finalice la transacción.
Ejemplos
1. Activador básico ANTES DE INSERTAR
Este ejemplo crea un disparador que comprueba si el `salario` es positivo antes de insertar una nueva fila en la tabla `empleados`.
2. Disparador ANTES DE ACTUALIZAR para registrar cambios
Aquí, un activador registra los cambios en el campo "salario" de una tabla "auditoría_empleados" antes de que se produzca una actualización.
3. Activador ANTES DE ELIMINAR para acciones en cascada
Este activador impide eliminar a un empleado si existen pedidos relacionados en la tabla "Pedidos".
Consejos y buenas prácticas