PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 12/08/2019 11:32:31

Firlfire
Membre

Lancer une query a chaque INSERT/UPDATE/DELETE sur certaines tables

Bonjour,

J'ai plusieurs tables dans ma DB. L'une d'elle contient un champ qui doit être mis à jour chaque fois qu'une query / transaction / tache est faites sur certaines tables.

Par exemple ci-dessous SubOne et SubTwo référencent Main.
Chaque fois qu'une action (INSERT, UPDATE ou DELETE) est fait sur une de ces trois tables (pas sur la table Other) j'ai besoin de lancer cette query :

update Main set contactedat=CURRENT_TIMESTAMP where mainId= /* mainId des data modifiées*/

Est-ce que je suis obligé de définir ces 3 triggers pour chaque table concernée ou y a-t-il un moyen plus simple ?

Merci d'avance!

CREATE TABLE Main (
  mainId serial PRIMARY KEY NOT NULL,
  contactedAt timestamp with time zone NOT NULL DEFAULT CURRENT_DATE,
  name text NOT NULL
);

CREATE TABLE SubOne (
  subOneId serial PRIMARY KEY NOT NULL,
  mainId integer NOT NULL REFERENCES Main(mainId),
  subOneName text DEFAULT null
);

CREATE TABLE SubTwo (
  SubTwoId serial PRIMARY KEY NOT NULL,
  mainId integer NOT NULL REFERENCES Main(mainId),
  subOneName text DEFAULT null
);

CREATE TABLE Other (
  otherId serial PRIMARY KEY NOT NULL,
  name varchar(60) NOT NULL
);

Hors ligne

#2 12/08/2019 12:30:27

Marc Cousin
Membre

Re : Lancer une query a chaque INSERT/UPDATE/DELETE sur certaines tables

Vous êtes obligé de définir les 3 triggers. Par contre rien ne vous empêche, d'avoir une seule fonction que les 3 triggers appellent...


Marc.

Hors ligne

#3 12/08/2019 15:02:33

gleu
Administrateur

Re : Lancer une query a chaque INSERT/UPDATE/DELETE sur certaines tables

Ça peut être un seul trigger par table :

CREATE TRIGGER... BEFORE INSERT OR UPDATE OR DELETE...

Guillaume.

Hors ligne

#4 12/08/2019 15:28:40

Firlfire
Membre

Re : Lancer une query a chaque INSERT/UPDATE/DELETE sur certaines tables

Merci pour vos réponses

Il y a un autre champs que je dois mettre à jour pour l'UPDATE, donc je suppose que je dois effectivement faire chaque Trigger

Hors ligne

#5 12/08/2019 15:32:30

Marc Cousin
Membre

Re : Lancer une query a chaque INSERT/UPDATE/DELETE sur certaines tables

Vous pouvez aussi dans le code du trigger déterminer sur quelle table il est en train de s'exécuter, c'est un compromis entre duplication de code et simplicité des fonctions trigger


Marc.

Hors ligne

Pied de page des forums