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 21/07/2010 13:47:44

icadedt
Membre

messagebox dans un trigger

bjr,


est il possible de mettre un messagebox dans un trigger?

quand le trigger se déclenche , un messagebos apparait pour avertir l'utilisateur par exemple...


est ce que "RAISE NOTICE" le fait


merci d'avance

Hors ligne

#2 21/07/2010 13:57:06

Marc Cousin
Membre

Re : messagebox dans un trigger

Non. La base de données ne s'occupe pas d'affichage.


Marc.

Hors ligne

#3 21/07/2010 13:59:41

gleu
Administrateur

Re : messagebox dans un trigger

Non. Un trigger s'exécute au niveau du serveur. Une interface utilisateur n'a aucun sens dans ce cadre. Quant à RAISE NOTICE, il enregistre une info dans les logs qu'un applicatif peut récupérer dans certains cas.


Guillaume.

Hors ligne

#4 21/07/2010 14:17:47

icadedt
Membre

Re : messagebox dans un trigger

gleu a écrit :

Non. Un trigger s'exécute au niveau du serveur. Une interface utilisateur n'a aucun sens dans ce cadre. Quant à RAISE NOTICE, il enregistre une info dans les logs qu'un applicatif peut récupérer dans certains cas.

je voulais dire dans le contexte de l'interface d'administration PGADMIN

Dernière modification par icadedt (21/07/2010 14:18:13)

Hors ligne

#5 21/07/2010 14:18:36

flo
Membre

Re : messagebox dans un trigger

Vous pourriez peut-être aller lire cette page de la documentation pour vous éclaircir les idées :
http://docs.postgresql.fr/9.0/tutorial-arch.html

Hors ligne

#6 21/07/2010 14:43:34

gleu
Administrateur

Re : messagebox dans un trigger

je voulais dire dans le contexte de l'interface d'administration PGADMIN

Non, ce n'est pas possible. Aucun langage PL n'est prévu pour ça et pgAdmin ne le supporte donc pas. Ça n'a pas de sens en soi.


Guillaume.

Hors ligne

#7 21/07/2010 15:30:25

icadedt
Membre

Re : messagebox dans un trigger

gleu a écrit :

je voulais dire dans le contexte de l'interface d'administration PGADMIN

Non, ce n'est pas possible. Aucun langage PL n'est prévu pour ça et pgAdmin ne le supporte donc pas. Ça n'a pas de sens en soi.

pourtant "RAISE EXCEPTION" permet d'afficher un messagebox

j'ai essayé "RAISE INFO" mais ca ne fait apparaitre aucun messagebox

Dernière modification par icadedt (21/07/2010 15:31:00)

Hors ligne

#8 21/07/2010 15:35:26

gleu
Administrateur

Re : messagebox dans un trigger

RAISE EXCEPTION n'affiche pas de messagebox. Ou alors on ne se comprend pas sur le "messagebox".


Guillaume.

Hors ligne

#9 05/06/2011 20:44:22

bebert73
Membre

Re : messagebox dans un trigger

Juste pour rebondir sur ce post : je pense que par "messagebox" il entendait le message d'erreur affiché par pgAdminIII quand on déclenche une EXCEPTION dans un trigger, et il se posait la question de savoir pourquoi rien ne s'affichait quand on faisait un "RAISE NOTICE" dans un trigger, au lieu d'un exception.

Je me suis posé la même question, j'ai programmé un RAISE NOTICE sur un trigger ON UPDATE, et à ma surprise quand on fait un update dans pgAdminIII aucun message n'apparaît, l'update se fait silencieusement.

La réponse est simplement que le client pgAdminIII semble être configuré pour ignorer le RAISE NOTICE, en effet quand je faisais l'update via le client psql le message du RAISE NOTICE s'affichait bien.

Hors ligne

#10 05/06/2011 23:16:31

gleu
Administrateur

Re : messagebox dans un trigger

Non, pgAdmin3 n'ignore pas le RAISE NOTICE. D'ailleurs, il ne lui est pas adressé. Le RAISE EXCEPTION par contre annule la requête. Et ça, pgAdmin ne peut que le remarquer smile


Guillaume.

Hors ligne

#11 06/06/2011 10:16:42

bebert73
Membre

Re : messagebox dans un trigger

gleu a écrit :

Non, pgAdmin3 n'ignore pas le RAISE NOTICE. D'ailleurs, il ne lui est pas adressé.

j'ai du mal à comprendre...ça veut dire que quand le moteur PostgreSQL exécute une fonction, il sait à quel client il a affaire ???

Je veux dire, quand je fais un UPDATE dans psql et que ça déclenche un trigger avec un RAISE NOTICE, le message s'affiche bien. Et dans pgAdminIII, rien ne s'affiche.

j'en ai déduit que le moteur envoie bien le contenu du RAISE NOTICE au client, et que c'est le client qui choisit de l'afficher ou non

c'est pas comme ça que ça marche ?

Dernière modification par bebert73 (06/06/2011 10:17:00)

Hors ligne

#12 06/06/2011 10:29:21

Marc Cousin
Membre

Re : messagebox dans un trigger

Un raise notice est remonté à l'application cliente qui l'a déclenché, pour peu que le client_min_messages soit au moins à ce niveau. Après c'est à l'application cliente de décider de ce qu'elle en fait (psql l'affiche, pgadmin aussi dans la fenêtre log je pense, mais je ne suis pas un gros utilisateur de pgadmin).


Marc.

Hors ligne

#13 06/06/2011 10:55:58

bebert73
Membre

Re : messagebox dans un trigger

ok c'est bien ce que j'avais compris

juste pour info, même dans le log pgAdmin n'enregistre pas les notice... il les ignore complètement on dirait

Hors ligne

#14 06/06/2011 10:56:44

Marc Cousin
Membre

Re : messagebox dans un trigger

Bon, faudra attendre le retour de gleu, alors, pgadmin c'est quand même pas mal son bébé smile


Marc.

Hors ligne

#15 07/06/2011 00:04:46

gleu
Administrateur

Re : messagebox dans un trigger

Ça fonctionne pour moi :

NOTICE:  hello
Query returned successfully: 1 row affected, 123 ms execution time.

Voici ma base :

CREATE FUNCTION tf1() RETURNS trigger
    LANGUAGE plpgsql
    AS $$begin
raise notice 'hello';
return new;
end$$;

CREATE TABLE t1 (
    c1 integer NOT NULL,
    c2 boolean,
    c3 text
);

INSERT INTO t1 VALUES (1, true, 'un');

CREATE TRIGGER tr1 BEFORE UPDATE ON t1 FOR EACH ROW EXECUTE PROCEDURE tf1();

Guillaume.

Hors ligne

#16 07/06/2011 08:35:14

bebert73
Membre

Re : messagebox dans un trigger

non, je confirme, pas de NOTICE dans mon log, il ne logge que les messages d'erreurs

ca depend peut-être de la version, j'ai la 1.12.2, ça doit pas être la dernière (je suis encore sous PG 9.0)

par contre je suis très surpris par ton code, comment peux-tu faire dans pgAdmin un UPDATE sur une table qui n'a pas de clé primaire ??????? pgAdmin n'affiche ces tables qu'en lecture, il annonce clairement qu'il ne peut ni insérer ni modifier des données dans une table sans PK

Hors ligne

#17 07/06/2011 09:06:39

Marc Cousin
Membre

Re : messagebox dans un trigger

Étrange. Le client_min_messages est bien à sa valeur par défaut dans le postgresql.conf ?


Marc.

Hors ligne

#18 07/06/2011 11:36:37

bebert73
Membre

Re : messagebox dans un trigger

oui, je n'ai pas touché à client_min_messages, en fait il est en commentaire, donc je suppose que ça veut dire que c'est la valeur par défaut qui est utilisé

de toutes façons ce n'est pas au niveau de PG que le problème se pose, car si je fais un update via psql le notice s'affiche bien, ce n'est que dans pgAdmin que rien ne s'affiche ni ne s'insère dans les logs

bah c'est pas grave, peut-être la version de pgAdmin est-elle en cause (je suis sous Windows XP en PG 9.0). C'est peut-être réglé en 9.1, je verrai lorsque je ferai la maj.

Hors ligne

#19 07/06/2011 20:43:25

gleu
Administrateur

Re : messagebox dans un trigger

De quels logs tu parles ? J'ai le NOTICE dans l'onglet Messages de l'outil de requête. Si tu cherches dans le fichier pgadmin.log, c'est clair que tu ne l'y trouveras pas. (Et du coup, tu as ta réponse, je lance le UPDATE à partir de l'éditeur de requêtes. Si tu fais tes modifs à partir de l'éditeur de données, les messages du style NOTICE ne sont pas affichés).


Guillaume.

Hors ligne

#20 07/06/2011 21:29:55

bebert73
Membre

Re : messagebox dans un trigger

ah okkkkay !

oui je ne parlais pas de l'éditeur de requêtes, je faisais les modifs directement dans l'éditeur de données (le tableau graphique dans lequel on peut saisir les données)
Et dans cet éditeur les NOTICE ne s'affichent pas.

Et oui, j'ai testé, dans l'éditeur de requêtes les NOTICE s'affichent bien.

on est donc d'accord !

Hors ligne

#21 07/06/2011 21:52:46

gleu
Administrateur

Re : messagebox dans un trigger

Yep, mais ça me fait penser qu'il pourrait être intéressant d'afficher les messages NOTICE à l'utilisateur. Pas sûr de trouver une interface conviviale pour ça par contre.


Guillaume.

Hors ligne

#22 07/06/2011 22:05:21

bebert73
Membre

Re : messagebox dans un trigger

peut-être en bas dans la barre d'état...mais l'utilisateur risque de passer à côté et de ne pas le voir

ou alors carrément une popup qu'il faut fermer en cliquant sur OK...

Hors ligne

Pied de page des forums