PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Exemple de déclencheur FOR EACH STATEMENT

OLD et NEW sont nuls ou non définis dans un déclencheur au niveau de l'instruction. Par documentation :

J'insiste sur moi.

Jusqu'à Postgres 10, cette lecture était légèrement différente, mais dans le même sens :

Bien que ces variables d'enregistrement ne soient toujours d'aucune utilité pour les déclencheurs au niveau de l'instruction, une nouvelle fonctionnalité est :

Tables de transition dans Postgres 10+

Postgres 10 a introduit des tables de transition. Ceux-ci permettent d'accéder à l'ensemble des lignes affectées. Le manuel :

Suivez le lien vers le manuel pour des exemples de code.

Exemple de déclencheur au niveau de l'instruction sans tables de transition

Avant l'avènement des tables de transition, celles-ci étaient encore moins courantes. Un exemple utile consiste à envoyer des notifications après certaines commandes DML.
Voici une version de base de ce que j'utilise :

-- Generic trigger function, can be used for multiple triggers:
CREATE OR REPLACE FUNCTION trg_notify_after()
  RETURNS trigger
  LANGUAGE plpgsql AS
$func$
BEGIN
   PERFORM pg_notify(TG_TABLE_NAME, TG_OP);
   RETURN NULL;
END
$func$;

-- Trigger
CREATE TRIGGER notify_after
AFTER INSERT OR UPDATE OR DELETE ON my_tbl
FOR EACH STATEMENT
EXECUTE PROCEDURE trg_notify_after();

Pour Postgres 11 ou version ultérieure, utilisez la syntaxe équivalente, moins confuse :

...
EXECUTE FUNCTION trg_notify_after();

Voir :