Accéder au contenu principal
Documents
Gestion des tableaux et des schémasSyntaxe de baseDéclencheursBases de donnéesFonctions de la dateFonctions des chaînes de caractèresFonctions mathématiquesFonctions JSONIndexes

Déclencheurs AFTER de PostgreSQL

Les déclencheurs dans PostgreSQL sont des fonctions qui s'exécutent automatiquement en réponse à des événements spécifiques sur un tableau, tels que INSERT, UPDATE, ou DELETE. Un déclencheur AFTER est exécuté après la fin de l'événement déclencheur, ce qui lui permet d'accéder à l'état final des données.

Utilisation

Les déclencheurs APRÈS sont utilisés lorsque vous devez effectuer des actions après un événement de modification des données, en veillant à ce que toute opération dépendante ne se produise qu'une fois l'événement initial terminé avec succès. Ils sont définis à l'aide de l'instruction CREATE TRIGGER.


CREATE TRIGGER trigger_name
AFTER event [OR event ...]
ON table_name
FOR EACH ROW
EXECUTE FUNCTION function_name();

Dans cette syntaxe, AFTER event spécifie l'événement (INSERT, UPDATE, DELETE) qui active le déclencheur, et function_name() est la fonction à exécuter après l'événement.

Exemples

1. Déclencheur de base AFTER INSERT


CREATE OR REPLACE FUNCTION log_new_user()
RETURNS TRIGGER AS $$
BEGIN
  INSERT INTO user_logs(user_id, action, log_time)
  VALUES (NEW.id, 'User Created', NOW());
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER after_user_insert
AFTER INSERT ON users
FOR EACH ROW
EXECUTE FUNCTION log_new_user();

Cet exemple tableau l'entrée d'un nouvel utilisateur dans user_logs après une insertion dans le tableau users.

2. Déclencheur AFTER UPDATE


CREATE OR REPLACE FUNCTION update_inventory_log()
RETURNS TRIGGER AS $$
BEGIN
  INSERT INTO inventory_logs(product_id, change, log_time)
  VALUES (NEW.product_id, NEW.quantity - OLD.quantity, NOW());
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER after_inventory_update
AFTER UPDATE ON inventory
FOR EACH ROW
EXECUTE FUNCTION update_inventory_log();

Ce déclencheur tableau la modification de la quantité d'un produit à inventory_logs après la mise à jour du tableau inventory.

3. Déclencheur AFTER DELETE avec logique conditionnelle


CREATE OR REPLACE FUNCTION log_deleted_order()
RETURNS TRIGGER AS $$
BEGIN
  IF OLD.status = 'completed' THEN
    INSERT INTO order_logs(order_id, action, log_time)
    VALUES (OLD.id, 'Completed Order Deleted', NOW());
  END IF;
  RETURN OLD;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER after_order_delete
AFTER DELETE ON orders
FOR EACH ROW
EXECUTE FUNCTION log_deleted_order();

Cet exemple tableau la suppression des commandes terminées du tableau orders, uniquement si l'état de la commande est "terminé".

Conseils et bonnes pratiques

  • Utilisez les déclencheurs AFTER pour les opérations dépendantes. Appliquez-les lorsque des actions ultérieures dépendent de l'achèvement de la transaction initiale.
  • Veillez à ce que les fonctions de déclenchement soient efficaces. Veillez à ce que la fonction exécutée par le déclencheur soit optimisée pour éviter de ralentir les transactions.
  • Évitez les logiques complexes. Simplifier la logique des déclencheurs afin de préserver la clarté et la facilité de maintenance.
  • Testez soigneusement les déclencheurs. Assurez-vous que les déclencheurs n'affectent pas involontairement la logique de l'application en les testant de manière exhaustive.
  • Documentez le comportement des déclencheurs. Conservez une documentation claire sur la fonction de chaque déclencheur, en particulier dans les applications de grande envergure.
  • Contrôler l'impact sur les performances. Utilisez des outils de journalisation ou de surveillance pour suivre l'impact des déclencheurs sur les performances des bases de données de production.
  • Comprendre les interactions entre les transactions. Les déclencheurs AFTER font partie de la transaction ; si une erreur survient dans la fonction de déclenchement, la transaction entière peut être annulée.
  • Tenez compte des limites. Soyez attentif aux conflits potentiels avec les contraintes de clés étrangères ou les actions en cascade lorsque vous utilisez des déclencheurs AFTER.
  • Gérer le cycle de vie des déclencheurs. Sachez comment désactiver ou supprimer un déclencheur lorsqu'il n'est plus nécessaire en utilisant ALTER TABLE ou DROP TRIGGER.