IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

Trigger after insertion pas validée


Sujet :

PostgreSQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2
    Points : 2
    Points
    2
    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

  2. #2
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Je ne sais pas s'il est possible de faire ce que tu demandes, mais ça m'a l'air un peu tarabiscoté comme méthode : au lieu de dire au serveur distant de venir récupérer les données, il ne serait pas plus rationnel que ta fonction lui passe elle-même les données en paramètre ?
    Roland

  3. #3
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Je ne suis pas bien sûr d'avoir compris tous les tenants et aboutissants de ton souci, mais je suis à peu près sûr que ça n'est pas un trigger qu'il te faut : les trigger sont fait pour manipuler les données, et tu tentes d'en détourner l'usage.

    Pilote ton insertion dans une fonction, qui retournera un booléen (à true si l'insertion est OK, ...), et ensuite tu pourras lancer ta procédure de récupération/envoi d'informations.
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    typiquement le mécanisme LISTEN/NOTIFY peut être utilisé pour ce genre de chose…

    possible solution :
    créer une table 'events' avec une colonne du même type que la PRIMARY KEY de la table originale concernée dans laquelle vous insérerez la key du record inséré lors du trigger
    faites un NOTIFY sur cette table

    de l'autre côté, faites un LISTEN sur la table 'events'…
    SELECT les records, faites le traitement, effacez les records traités (ou marquez les records comme ayant été traités pour ne pas les traiter plus d'une fois)…

    (avec une colonne event_type en plus vous pourrez "écouter" tout ce que vous voudrez de l'autre côté… en insérant des records ad-hoc dans events avec l'event_type correspondant…)

Discussions similaires

  1. [Trigger After Insert ne se declenche pas]
    Par Ramajb dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 11/03/2011, 15h41
  2. Trigger after insertion pas validée
    Par guigeek dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 19/12/2006, 14h23
  3. Un Trigger After INSERT peut-il empêcher l'INSERT ?
    Par cian2006 dans le forum Oracle
    Réponses: 3
    Dernier message: 13/09/2006, 17h27
  4. Trigger after insert, sans each row, possible ??
    Par veenie dans le forum Oracle
    Réponses: 5
    Dernier message: 16/02/2006, 15h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo