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 09/05/2023 16:11:53

PEREZ J.
Membre

[Résolu] question à propos des déclencheurs

Bonjour.
Je n'ai jamais eu besoin de travailler avec les triggers mais là, je dois mettre en place un trigger qui rempli un champs smallint vide avec l'année en cours.
Je souhaite donc intégrer la requête update table set annee = select date_part('year', now()) where annee is null dans un trigger after insert or update mais je ne sais pas comment faire?
Quelqu'un serait-il susceptible de m'aider?
Merci d'avance.

Résolu en mettant default = date_part('year', now())

Dernière modification par PEREZ J. (10/05/2023 16:48:33)

Hors ligne

#2 09/05/2023 17:47:35

rjuju
Administrateur

Re : [Résolu] question à propos des déclencheurs

Il ne faut surtout pas faire un UPDATE lors d'un trigger sinon votre trigger va s'appeler récursivement.  Il faut simplement modifier la ligne en cours.  Vous pouvez vous inspirer de l'exemple "emp_stamp" à l'adresse https://docs.postgresql.fr/15/plpgsql-t … ML-TRIGGER

Hors ligne

#3 09/05/2023 17:59:52

PEREZ J.
Membre

Re : [Résolu] question à propos des déclencheurs

en réfléchissant un peu, j'aurais dû y penser.
Par contre je n'y connais rien en PL/pgSQL mais je vais voir si je m'en sors avec quelque chose du style

 if new.annee is null then new.annee = select date_part('year', now()) endif;

dans ma fonction

Hors ligne

#4 09/05/2023 21:35:47

gleu
Administrateur

Re : [Résolu] question à propos des déclencheurs

Pourquoi ne pas utiliser une valeur par défaut à la place ? ce serait plus performant.


Guillaume.

Hors ligne

#5 10/05/2023 11:32:37

PEREZ J.
Membre

Re : [Résolu] question à propos des déclencheurs

ça serait l'idéal mais je ne vois pas comment afficher l'année en cours comme valeur par défaut en postgresql

Hors ligne

#6 10/05/2023 15:18:01

rjuju
Administrateur

Re : [Résolu] question à propos des déclencheurs

De la même façon, en utilisant "date_part('year', now())" en expression pour la clause DEFAULT.


Attention toutefois, ce n'est pas exactement le même comportement qu'un trigger: la valeur par défaut, comme son nom l'indique, est uniquement utilisée pour spécifier une valeur si la requête qui insert la ligne n'en spécifie pas, mais ne garantit donc pas que la ligne contiendra l'année en cours si un utilisateur insère une ligne avec explicitement une autre année.

Hors ligne

#7 10/05/2023 16:48:51

PEREZ J.
Membre

Re : [Résolu] question à propos des déclencheurs

merci rjuju, je ne pensais pas que ça fonctionnait, j'aurais dû essayer avant.
Pas de soucis c'est bien une valeur par défaut car l'utilisateur peut saisir une autre année à l'insertion.

Hors ligne

Pied de page des forums