Los desencadenantes PostgreSQL son funciones de devolución de llamada de la base de datos que se ejecutan o "desencadenan" automáticamente cuando se produce un evento especificado de la base de datos, como un `INSERT`, `UPDATE`, `DELETE` o `TRUNCATE`. Se utilizan para mantener la integridad de los datos, aplicar normas empresariales o realizar registros y auditorías.
Utilización
Los desencadenantes se utilizan cuando necesitas automatizar tareas en respuesta a cambios en los datos de una tabla. Son especialmente útiles para mantener la coherencia y aplicar una lógica empresarial compleja a nivel de base de datos.
sql
CREATETRIGGER trigger_name
{BEFORE|AFTER|INSTEADOF}{INSERT|UPDATE|DELETE|TRUNCATE}ON table_name
[FOREACHROW|FOREACHSTATEMENT]EXECUTEPROCEDUREfunction_name();Con la tecnología de
En esta sintaxis, `CREATE TRIGGER` define un nuevo activador llamado `trigger_name`, especificando cuándo debe activarse (`BEFORE`, `AFTER` o `INSTEAD OF`), qué evento debe activarlo (`INSERT`, `UPDATE`, `DELETE` o `TRUNCATE`) y la tabla a la que se aplica (`ON table_name`). EJECUTAR PROCEDIMIENTO" llama a la función que contiene la lógica de activación.
Ejemplos
1. Disparo básico al insertar
sql
CREATEORREPLACEFUNCTIONlog_insert()RETURNSTRIGGERAS $$
BEGININSERTINTOlog_table(action, timestamp)VALUES('INSERT',NOW());RETURNNEW;END;
$$ LANGUAGE plpgsql;CREATETRIGGER insert_trigger
AFTERINSERTON main_table
FOREACHROWEXECUTEPROCEDURElog_insert();Con la tecnología de
Este ejemplo crea un activador que registra una entrada en `tabla_log` cada vez que se inserta una nueva fila en `tabla_principal`.
2. Activador para aplicar la norma empresarial
sql
CREATEORREPLACEFUNCTIONcheck_salary()RETURNSTRIGGERAS $$
BEGINIFNEW.salary <1000THENRAISEEXCEPTION'Salary cannot be less than 1000';ENDIF;RETURNNEW;END;
$$ LANGUAGE plpgsql;CREATETRIGGER salary_check
BEFOREINSERTORUPDATEON employees
FOREACHROWEXECUTEPROCEDUREcheck_salary();Con la tecnología de
Aquí, un activador garantiza que el salario de cualquier empleado no se establezca por debajo de 1000, ni en la inserción ni en la actualización.
3. Activador del registro de auditoría
sql
CREATEORREPLACEFUNCTIONaudit_changes()RETURNSTRIGGERAS $$
BEGINIFTG_OP='UPDATE'THENINSERTINTOaudit_log(table_name, operation, old_data, new_data, changed_at)VALUES(TG_TABLE_NAME,TG_OP,ROW(OLD.*),ROW(NEW.*),NOW());ENDIF;RETURNNEW;END;
$$ LANGUAGE plpgsql;CREATETRIGGER audit_trigger
AFTERUPDATEON any_table
FOREACHROWEXECUTEPROCEDUREaudit_changes();Con la tecnología de
Este ejemplo captura los cambios en `cualquier_tabla` registrando los datos de las filas antiguas y nuevas en una tabla `audit_log` después de cada actualización.
Mantén los activadores simples y eficientes. Una lógica compleja puede ralentizar las operaciones de la base de datos. Ten cuidado con las implicaciones para el rendimiento, especialmente en entornos altamente transaccionales.
Utiliza activadores para las restricciones críticas. Asegúrate de que las reglas empresariales críticas se aplican a nivel de base de datos.
Limita los efectos secundarios. Los desencadenantes deben evitar alterar el estado de la base de datos de forma inesperada.
Activadores de documentos. Mantén una documentación clara de cada activador para ayudar a los futuros programadores a comprender su finalidad.
Prueba a fondo. Asegúrate de que los activadores funcionan como se espera probándolos con diversos escenarios y casos extremos.
Ten en cuenta el orden de ejecución. Comprende el orden de ejecución cuando se definen varios desencadenantes para el mismo evento en una tabla.
Gestiona las llamadas recursivas. Sé consciente de las posibles llamadas desencadenantes recursivas e implanta salvaguardas cuando sea necesario.
Los desencadenantes PostgreSQL son funciones de devolución de llamada de la base de datos que se ejecutan o "desencadenan" automáticamente cuando se produce un evento especificado de la base de datos, como un `INSERT`, `UPDATE`, `DELETE` o `TRUNCATE`. Se utilizan para mantener la integridad de los datos, aplicar normas empresariales o realizar registros y auditorías.
Utilización
Los desencadenantes se utilizan cuando necesitas automatizar tareas en respuesta a cambios en los datos de una tabla. Son especialmente útiles para mantener la coherencia y aplicar una lógica empresarial compleja a nivel de base de datos.
En esta sintaxis, `CREATE TRIGGER` define un nuevo activador llamado `trigger_name`, especificando cuándo debe activarse (`BEFORE`, `AFTER` o `INSTEAD OF`), qué evento debe activarlo (`INSERT`, `UPDATE`, `DELETE` o `TRUNCATE`) y la tabla a la que se aplica (`ON table_name`). EJECUTAR PROCEDIMIENTO" llama a la función que contiene la lógica de activación.
Ejemplos
1. Disparo básico al insertar
Este ejemplo crea un activador que registra una entrada en `tabla_log` cada vez que se inserta una nueva fila en `tabla_principal`.
2. Activador para aplicar la norma empresarial
Aquí, un activador garantiza que el salario de cualquier empleado no se establezca por debajo de 1000, ni en la inserción ni en la actualización.
3. Activador del registro de auditoría
Este ejemplo captura los cambios en `cualquier_tabla` registrando los datos de las filas antiguas y nuevas en una tabla `audit_log` después de cada actualización.
Gestionar desencadenantes
Para desactivar un activador:
Para activar un activador:
Para eliminar un activador:
Consejos y buenas prácticas