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

Qu'est-ce que Trigger dans PostgreSQL?

A PostgreSQL Gâchette est une fonction qui se déclenche automatiquement lorsqu'un événement de base de données se produit sur un objet de base de données. Par exemple, un tableau. Des exemples d'événements de base de données pouvant activer un déclencheur incluent INSERT, UPDATE, DELETE, etc. De plus, lorsque vous créez un déclencheur pour une table, le déclencheur sera automatiquement supprimé lorsque cette table est supprimée.

Comment Trigger est utilisé dans PostgreSQL?

Un déclencheur peut être marqué avec l’opérateur FOR EACH ROW lors de sa création. Un tel déclencheur sera appelé une fois pour chaque ligne modifiée par l'opération. Un déclencheur peut également être marqué avec l'opérateur FOR EACH STATEMENT lors de sa création. Ce déclencheur ne sera exécuté qu'une seule fois pour une opération spécifique.

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 de prix. Nous donnerons au déclencheur le nom price_trigger. Avant qu'un nouvel enregistrement ne soit créé, la fonction de déclenchement sera automatiquement invoquée pour enregistrer 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 que nous avons inséré un enregistrement dans la table Price, un enregistrement doit également être inséré dans la table Price_Audit. Ce sera le résultat du déclencheur que nous avons créé sur le tableau des prix. Vérifions ceci :

SELECT * FROM Price_Audits;

Cela renverra ce qui suit :

PostgreSQL Créer un déclencheur

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

Déclencheur de liste Postgres

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 :

Déclencheur de liste Postgres

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

Déclencheur de chute Postgres

Pour déposer 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 supprimer le déclencheur nommé example_trigger sur la table Price, nous exécutons la commande suivante :

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 les trois actions ont été effectuées à l'aide de pgAdmin.

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

Voici comment créer un déclencheur dans Postgres à l'aide de pgAdmin :

Étape 1) Connectez-vous à votre compte pgAdmin

Ouvrez pgAdmin et connectez-vous à votre compte en utilisant vos informations d'identification

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

  1. Dans la barre de navigation à 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, tapez la requête sous 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 auditfunc

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 pour 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)
  2. 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

Suppression de déclencheurs à l'aide de 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

Résumé

  • A PostgreSQL trigger fait référence à une fonction qui est déclenchée automatiquement lorsqu'un événement de base de données se produit sur un objet de base de données, tel qu'une table.
  • Des exemples de tels événements de base de données incluent INSERT, UPDATE, DELETE, etc.
  • Un déclencheur n'existe que pendant la durée de vie de l'objet de base de données pour lequel il a été créé.
  • Si l'objet de base de données est supprimé, le déclencheur sera également supprimé.
  • PostgreSQL les déclencheurs sont créés à l'aide de l'instruction CREATE TRIGGER.
  • Chaque déclencheur est associé à une fonction indiquant ce que le déclencheur fera lorsqu'il sera invoqué.

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