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 desencadenante AFTER se ejecuta después de que haya finalizado el evento desencadenante, lo que le permite acceder al estado final de los datos.
Utilización
Los desencadenantes DESPUÉS se utilizan cuando necesitas realizar acciones después de un evento de modificación de datos, asegurando que cualquier operación dependiente se produzca sólo después de que el evento inicial se haya completado con éxito. Se definen mediante la declaración CREATE TRIGGER.
CREATETRIGGER trigger_name
AFTER event [OR event ...]ON table_name
FOR EACH ROWEXECUTEFUNCTION function_name();Con la tecnología de
En esta sintaxis, AFTER event especifica el evento (INSERT, UPDATE, DELETE) que activa el desencadenador, y function_name() es la función a ejecutar tras el evento.
Ejemplos
1. Activador básico AFTER INSERT
CREATEORREPLACEFUNCTION log_new_user()RETURNSTRIGGERAS $$
BEGININSERTINTO user_logs(user_id,action, log_time)VALUES(NEW.id,'User Created',NOW());RETURN NEW;END;
$$ LANGUAGE plpgsql;CREATETRIGGER after_user_insert
AFTERINSERTON users
FOR EACH ROWEXECUTEFUNCTION log_new_user();Con la tecnología de
Este ejemplo registra la entrada de un nuevo usuario en user_logs tras una inserción en la tabla users.
2. Activador AFTER UPDATE
CREATEORREPLACEFUNCTION update_inventory_log()RETURNSTRIGGERAS $$
BEGININSERTINTO inventory_logs(product_id, change, log_time)VALUES(NEW.product_id, NEW.quantity - OLD.quantity,NOW());RETURN NEW;END;
$$ LANGUAGE plpgsql;CREATETRIGGER after_inventory_update
AFTERUPDATEON inventory
FOR EACH ROWEXECUTEFUNCTION update_inventory_log();Con la tecnología de
Este activador registra el cambio de cantidad de un producto en inventory_logs después de que se actualice la tabla inventory.
3. Activador AFTER DELETE con lógica condicional
CREATEORREPLACEFUNCTION log_deleted_order()RETURNSTRIGGERAS $$
BEGINIF OLD.status='completed'THENINSERTINTO order_logs(order_id,action, log_time)VALUES(OLD.id,'Completed Order Deleted',NOW());ENDIF;RETURN OLD;END;
$$ LANGUAGE plpgsql;CREATETRIGGER after_order_delete
AFTERDELETEON orders
FOR EACH ROWEXECUTEFUNCTION log_deleted_order();Con la tecnología de
Este ejemplo registra la eliminación de pedidos completados de la tabla orders, sólo si el estado del pedido era "completado".
Consejos y buenas prácticas
Utiliza activadores AFTER para las operaciones dependientes. Aplícalos cuando las acciones posteriores dependan de la finalización de la transacción original.
Mantén la eficacia de las funciones de activación. Asegúrate de que la función ejecutada por el activador está optimizada para evitar ralentizar las transacciones.
Evita la lógica compleja. Simplifica la lógica dentro de los activadores para mantener la claridad y la facilidad de mantenimiento.
Prueba a fondo los activadores. Asegúrate de que los activadores no afectan involuntariamente a la lógica de la aplicación, probándolos exhaustivamente.
Documenta el comportamiento desencadenante. Mantén una documentación clara de para qué está diseñado cada activador, especialmente en las aplicaciones más grandes.
Controla el impacto en el rendimiento. Utiliza herramientas de registro o supervisión para hacer un seguimiento del impacto en el rendimiento de los activadores en las bases de datos de producción.
Comprende las interacciones de las transacciones. Los desencadenantes AFTER forman parte de la transacción; si se produce un error en la función desencadenante, puede revertirse toda la transacción.
Ten en cuenta las limitaciones. Ten en cuenta los posibles conflictos con restricciones de clave foránea o acciones en cascada cuando utilices activadores AFTER.
Gestiona el ciclo de vida del activador. Saber desactivar o soltar un disparador cuando ya no se necesita utilizando ALTER TABLE o DROP TRIGGER.
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 desencadenante AFTER se ejecuta después de que haya finalizado el evento desencadenante, lo que le permite acceder al estado final de los datos.
Utilización
Los desencadenantes DESPUÉS se utilizan cuando necesitas realizar acciones después de un evento de modificación de datos, asegurando que cualquier operación dependiente se produzca sólo después de que el evento inicial se haya completado con éxito. Se definen mediante la declaración
CREATE TRIGGER.En esta sintaxis,
AFTER eventespecifica el evento (INSERT, UPDATE, DELETE) que activa el desencadenador, yfunction_name()es la función a ejecutar tras el evento.Ejemplos
1. Activador básico AFTER INSERT
Este ejemplo registra la entrada de un nuevo usuario en
user_logstras una inserción en la tablausers.2. Activador AFTER UPDATE
Este activador registra el cambio de cantidad de un producto en
inventory_logsdespués de que se actualice la tablainventory.3. Activador AFTER DELETE con lógica condicional
Este ejemplo registra la eliminación de pedidos completados de la tabla
orders, sólo si el estado del pedido era "completado".Consejos y buenas prácticas
ALTER TABLEoDROP TRIGGER.