Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/12/2006, 19h43   #1
Invité de passage
 
Inscription : décembre 2006
Messages : 2
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 2
Points : 0
Points : 0
Par défaut Trigger after insertion pas validée

Bonjour,
je suis en train de développer une application en C avec une base de données postgreSQL et je débute seulement avec postgreSQL même si j'avais déja manipulé d'autres base de données auparavant.
Je vous explique mon problème. J'ai créé un trigger after qui lance une fonction créée en C. Cette fonction lance un appel de procédure sur un serveur distant afin qu'il récupère la ligne que l'on vient d'insérer. Le problème est que à priori tant que le trigger ne s'est pas fini l'insertion n'est pas considéré comme valide. Je ne peux pas récupérer l'élément inséré tant que le trigger n'est pas fini or, c'est dans le trigger que j'appelle la fonction qui récupère la ligne insérée via un SELECT .
Je me suis rendu compte de cela en faisant quelques petits tests genre mettre un sleep(20) dans le trigger et voir que mon insertion dure alors plus de 20 secondes.
Pour éviter ce problème j'ai donc appelé ma procédure distante via un fork() pour créer un nouveau processus mais le problème est que je ne peux pas savoir si l'insertion s'est fini ou pas c'est-à-dire que si ma base de données se mettait a ramer lors de l'insert mon trigger ne le saurait pas et je ne pourrais pas récupérer la ligne insérée.
Je ne sais pas si j'ai été clair en tout cas voila mes soucis si quelqu'un peut m'aider pour me dire par exemple comment savoir lorsqu'un INSERT est fini.
Merci par avance,
GuiGeek
guigeek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 12h41   #2
Membre chevronné
 
Avatar de Spoutnik
 
Homme
Inscription : octobre 2003
Messages : 668
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : Etats-Unis

Informations forums :
Inscription : octobre 2003
Messages : 668
Points : 746
Points : 746
Citation:
Envoyé par guigeek
J'ai créé un trigger after qui lance une fonction créée en C. Cette fonction lance un appel de procédure sur un serveur distant afin qu'il récupère la ligne que l'on vient d'insérer. Le problème est que à priori tant que le trigger ne s'est pas fini l'insertion n'est pas considéré comme valide.Je ne peux pas récupérer l'élément inséré tant que le trigger n'est pas fini or, c'est dans le trigger que j'appelle la fonction qui récupère la ligne insérée via un SELECT .
Hello,

Si je ne dis pas de bêtises, dans un trigger, tu peux utiliser le mot clef "NEW" qui te permet d'accéder aux lignes ajoutées/updatées (désolé pour le franglais )
CF par exemple : http://developer.postgresql.org/pgdo...l-trigger.html

++
__________________
Two beer or not two beer. (Shakesbeer)
Question technique par MP => poubelle!
Spoutnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 12h55   #3
Membre actif
 
Inscription : novembre 2006
Messages : 194
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 194
Points : 197
Points : 197
le NEW est valable pour un trigger fait avec pl/pgsql.
pour du C, y a une structure TriggerData qui contient un champs tg_trigtuple (je crois) qui contient la ligne insérée
coca25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 14h23   #4
Membre chevronné
 
Avatar de Spoutnik
 
Homme
Inscription : octobre 2003
Messages : 668
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : Etats-Unis

Informations forums :
Inscription : octobre 2003
Messages : 668
Points : 746
Points : 746
yep, ca semble être ca

http://developer.postgresql.org/pgdo...interface.html
__________________
Two beer or not two beer. (Shakesbeer)
Question technique par MP => poubelle!
Spoutnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h41.


 
 
 
 
Partenaires

Hébergement Web