PostgreSQL Déclencheurs : créer, répertorier et supprimer avec un exemple

⚡ Résumé intelligent

PostgreSQL Les déclencheurs sont des fonctions qui s'exécutent automatiquement lorsqu'un événement INSERT, UPDATE ou DELETE se produit sur une table, permettant à la base de données d'appliquer des règles, d'enregistrer les modifications et d'auditer les données sans code applicatif supplémentaire.

  • | Définition: Un déclencheur est une fonction invoquée automatiquement lors d'un événement de base de données tel que INSERT, UPDATE ou DELETE.
  • (I.e. Portée: FOR EACH ROW exécute le déclencheur une fois par ligne affectée, tandis que FOR EACH STATEMENT l'exécute une fois par opération.
  • Créer: CREATE TRIGGER associe une fonction à une table et définit le moment d'exécution AVANT, APRÈS ou AU LIEU DE.
  • 📋 Liste: Interrogez le catalogue pg_trigger avec SELECT tgname pour afficher tous les déclencheurs de la base de données.
  • 🇧🇷 Drop: DROP TRIGGER supprime un déclencheur, et IF EXISTS empêche une erreur lorsqu'il est absent.
  • 🤖 Aide IA : Les assistants IA génèrent des fonctions de déclenchement et suggèrent un moment AVANT ou APRÈS à partir d'une requête en langage clair.

PostgreSQL triggers

Qu'est-ce que Trigger dans PostgreSQL?

A PostgreSQL Gâchette Il s'agit d'une fonction qui se déclenche automatiquement lorsqu'un événement de base de données survient sur un objet de base de données, par exemple une table. Parmi les événements de base de données pouvant activer un déclencheur, on peut citer les opérations INSERT, UPDATE et DELETE. De plus, lorsqu'un déclencheur est créé pour une table, il est automatiquement supprimé lorsque cette table est supprimée.

Comment Trigger est utilisé dans PostgreSQL?

Lors de la création d'un déclencheur, l'opérateur FOR EACH ROW peut être utilisé. Ce déclencheur sera alors exécuté une fois pour chaque ligne modifiée par l'opération. De même, lors de sa création, un déclencheur peut être utilisé avec l'opérateur FOR EACH STATEMENT. Ce déclencheur ne sera alors exécuté qu'une seule fois pour une opération donnée.

PostgreSQL Créer un déclencheur

Pour créer un déclencheur, nous utilisons la fonction CREATE TRIGGER. Voici la syntaxe de la fonction :

CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name
ON table-name
[
 -- Trigger logic
];

Le nom du déclencheur est le nom du déclencheur.

AVANT, APRÈS et INSTEAD OF sont des mots-clés qui déterminent quand le déclencheur sera invoqué.

Le nom de l'événement est le nom de l'événement qui provoquera l'appel du déclencheur. Cela peut être INSERT, METTRE À JOUR, SUPPRIMER, etc.

Le nom de la table est le nom de la table sur laquelle le déclencheur doit être créé.

Si le déclencheur doit être créé pour une opération INSERT, nous devons ajouter le paramètre ON column-name.

La syntaxe suivante le démontre :

CREATE TRIGGER trigger-name AFTER INSERT ON column-name
ON table-name
[
 -- Trigger logic
];

PostgreSQL Créer un exemple de déclencheur

Nous utiliserons le tableau des prix ci-dessous :

Le prix :

PostgreSQL Créer un déclencheur

Créons une autre table, Price_Audits, où nous enregistrerons les modifications apportées à la table Price :

CREATE TABLE Price_Audits (
   book_id INT NOT NULL,
    entry_date text NOT NULL
);

Nous pouvons maintenant définir une nouvelle fonction nommée auditfunc :

CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$
   BEGIN
      INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);
      RETURN NEW;
   END;
$my_table$ LANGUAGE plpgsql;

La fonction ci-dessus insérera un enregistrement dans la table Price_Audits, y compris le nouvel identifiant de ligne et l'heure de création de l'enregistrement.

Maintenant que nous avons la fonction de déclenchement, nous devons la lier à notre table Price. Nous nommerons ce déclencheur price_trigger. Avant la création d'un nouvel enregistrement, la fonction de déclenchement sera automatiquement appelée pour consigner les modifications. Voici le déclencheur :

CREATE TRIGGER price_trigger AFTER INSERT ON Price
FOR EACH ROW EXECUTE PROCEDURE auditfunc();

Insérons un nouvel enregistrement dans la table Price :

INSERT INTO Price
VALUES (3, 400);

Maintenant qu'un enregistrement a été inséré dans la table Price, un enregistrement devrait également être inséré dans la table Price_Audits grâce au déclencheur que nous avons créé. Vérifions cela :

SELECT * FROM Price_Audits;

Cela renverra ce qui suit :

PostgreSQL Créer un déclencheur

Le déclencheur a fonctionné avec succès.

PostgreSQL Déclencheur de liste

Tous les déclencheurs que vous créez dans PostgreSQL sont stockés dans la table pg_trigger. Pour voir la liste des déclencheurs dont vous disposez sur le base de données, interrogez la table en exécutant la commande SELECT comme indiqué ci-dessous :

SELECT tgname FROM pg_trigger;

Cela renvoie les éléments suivants :

PostgreSQL Déclencheur de liste

La colonne tgname de la table pg_trigger indique le nom du déclencheur.

PostgreSQL Déclencheur de chute

Lorsqu'un déclencheur n'est plus nécessaire, vous pouvez le supprimer tout aussi facilement. Pour supprimer un PostgreSQL déclencheur, nous utilisons l'instruction DROP TRIGGER avec la syntaxe suivante :

DROP TRIGGER [IF EXISTS] trigger-name
ON table-name [ CASCADE | RESTRICT ];

Le paramètre trigger-name indique le nom du déclencheur à supprimer.

Le nom de la table indique le nom de la table à partir de laquelle le déclencheur doit être supprimé.

La clause IF EXISTS tente de supprimer un déclencheur existant. Si vous tentez de supprimer un déclencheur qui n'existe pas sans utiliser la clause IF EXISTS, vous obtiendrez une erreur.

L'option CASCADE vous aidera à supprimer automatiquement tous les objets qui dépendent du déclencheur.

Si vous utilisez l'option RESTRICT, le déclencheur ne sera pas supprimé si des objets en dépendent.

Par Exemple:

Pour déposer le déclencheur nommé example_trigger sur la table Company, exécutez la commande suivante :

DROP TRIGGER example_trigger IF EXISTS
ON Company;

Utiliser pgAdmin

Voyons maintenant comment ces trois actions sont réalisées à l'aide de pgAdmin.

Comment créer un déclencheur dans PostgreSQL en utilisant pgAdmin

Voici comment créer un déclencheur dans PostgreSQL en utilisant pgAdmin :

Étape 1) Connectez-vous à votre compte pgAdmin

Ouvrez pgAdmin et connectez-vous à votre compte en utilisant vos identifiants.

Étape 2) Créer une base de données de démonstration

  1. Dans la barre de navigation de gauche, cliquez sur Bases de données.
  2. Cliquez sur Démo.

Créer un déclencheur dans PostgreSQL en utilisant pgAdmin

Étape 3) Tapez la requête

Pour créer la table Price_Audits, saisissez la requête dans l'éditeur :

CREATE TABLE Price_Audits (
   book_id INT NOT NULL,
    entry_date text NOT NULL
)

Étape 4) Exécuter la requête

Cliquez sur le bouton Exécuter.

Créer un déclencheur dans PostgreSQL en utilisant pgAdmin

Étape 5) Exécutez le Code pour la fonction d'audit

Exécutez le code suivant pour définir la fonction auditfunc :

CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$
   BEGIN
      INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);
      RETURN NEW;
   END;
$my_table$ LANGUAGE plpgsql

Étape 6) Exécutez le Code créer un déclencheur

Exécutez le code suivant pour créer le déclencheur price_trigger :

CREATE TRIGGER price_trigger AFTER INSERT ON Price
FOR EACH ROW EXECUTE PROCEDURE auditfunc()

Étape 7) Insérer un nouvel enregistrement

  1. Exécutez la commande suivante pour insérer un nouvel enregistrement dans la table Price :
INSERT INTO Price
VALUES (3, 400)
  1. Exécutez la commande suivante pour vérifier si un enregistrement a été inséré dans la table Price_Audits :
SELECT * FROM Price_Audits

Cela devrait renvoyer ce qui suit :

Créer un déclencheur dans PostgreSQL en utilisant pgAdmin

Étape 8) Vérifiez le contenu du tableau

Vérifions le contenu de la table Price_Audits.

Liste des déclencheurs à l'aide de pgAdmin

Étape 1) Exécutez la commande suivante pour vérifier les déclencheurs dans votre base de données :

SELECT tgname FROM pg_trigger

Cela renvoie les éléments suivants :

Liste des déclencheurs à l'aide de pgAdmin

Goutteping Déclencheurs utilisant pgAdmin

Pour déposer le déclencheur nommé example_trigger sur la table Company, exécutez la commande suivante :

DROP TRIGGER example_trigger IF EXISTS
ON Company

Téléchargez la base de données utilisée dans ce tutoriel

FAQ

Un déclencheur BEFORE s'exécute avant l'enregistrement de la modification de la ligne, ce qui lui permet de la modifier ou de la rejeter. Un déclencheur AFTER s'exécute après l'enregistrement de la modification, ce qui convient aux tâches de journalisation et d'audit.

Un déclencheur INSTEAD OF est défini sur une vue, et non sur une table. Il remplace les instructions INSERT, UPDATE ou DELETE par une logique personnalisée, rendant ainsi une vue en lecture seule accessible en écriture.

Les fonctions de déclenchement sont généralement écrites en PL/pgSQL. PostgreSQL prend également en charge PL/PythonPL/Perl, PL/Tcl et C, vous pouvez donc choisir le langage qui correspond à votre logique.

Utilisez la commande ALTER TABLE nom-table DISABLE TRIGGER nom-déclencheur pour désactiver le déclencheur, et ENABLE TRIGGER pour le réactiver. Cela évite les pertes de données.ping et recréer le déclencheur lors des chargements en masse.

Oui. Chaque déclencheur ajoute du traitement à chaque ligne ou instruction concernée ; une logique de déclenchement complexe peut donc ralentir les écritures. Veillez à ce que les fonctions de déclenchement soient courtes et indexez les colonnes interrogées.

Oui. Si un déclencheur modifie une autre table qui possède également des déclencheurs, ces derniers se déclenchent aussi, créant ainsi des déclencheurs en cascade. PostgreSQL limite la profondeur d'imbrication pour éviter les boucles infinies.

Les assistants de codage IA transforment une requête en langage clair en une instruction CREATE TRIGGER complète et une fonction de déclenchement, suggèrent un timing BEFORE ou AFTER et expliquent le PL/pgSQL généré pour une vérification rapide.

Oui. Des outils tels que pgai et les assistants basés sur GPT traduisent une règle décrite en SQL de déclenchement et peuvent créer des déclencheurs INSERT qui étiquettent ou valident automatiquement les nouvelles données à mesure qu'elles arrivent.

Résumez cet article avec :