Vous n'êtes pas identifié(e).
Pages : 1
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
Non. La base de données ne s'occupe pas d'affichage.
Marc.
Hors ligne
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
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
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
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
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
RAISE EXCEPTION n'affiche pas de messagebox. Ou alors on ne se comprend pas sur le "messagebox".
Guillaume.
Hors ligne
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
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
Guillaume.
Hors ligne
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
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
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
Bon, faudra attendre le retour de gleu, alors, pgadmin c'est quand même pas mal son bébé
Marc.
Hors ligne
Ç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
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
Étrange. Le client_min_messages est bien à sa valeur par défaut dans le postgresql.conf ?
Marc.
Hors ligne
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
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
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
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
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
Pages : 1