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 :

Contourner un trigger


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    programmeur / analyste
    Inscrit en
    Novembre 2003
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Canada

    Informations professionnelles :
    Activité : programmeur / analyste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2003
    Messages : 41
    Par défaut Contourner un trigger
    Bonjour tous le monde!

    Voilà mon problème, j'ai un trigger qui est lancer avant l'insersion d'une ligne dans une table et tout fonctionne très bien mais, dans certains cas particulier,
    j'aimerais pouvoir exécuter l'insersion des données dans la BD sans lancer le trigger.

    Existe t-il une façon de contourner un trigger sans le dropper?

    J'utilise plperlu pour les fonctions trigger.

    Merci

  2. #2
    jnore
    Invité(e)
    Par défaut
    il faudrait rajouter une condition if dans ton trigger qui testerait la valeur d'un champ(0 ou 1) par exemple.
    En fonction de cette valeur il agit ou pas.

    Peut-etre y at-il une autre solution?

  3. #3
    Membre averti
    Homme Profil pro
    programmeur / analyste
    Inscrit en
    Novembre 2003
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Canada

    Informations professionnelles :
    Activité : programmeur / analyste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2003
    Messages : 41
    Par défaut
    Citation Envoyé par jnore
    il faudrait rajouter une condition if dans ton trigger qui testerait la valeur d'un champ(0 ou 1) par exemple.
    En fonction de cette valeur il agit ou pas.
    J'y avait penser mais, le problème est que ça me ferrais trop de requête à modifier dans mon code (qui est en production) donc, la solution que je recherche ne doit pas affecter les champs da ma table.

    Merci quand mème

  4. #4
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 338
    Par défaut
    Vous nous indiquez pas quelle version de PostgreSQL vous utilisez sachant qu'a partir de la 8.1 il est possible de désactiver un trigger avec un alter table.

  5. #5
    Invité de passage
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 1
    Par défaut Une autre piste peut-être ...
    Une possibilité consisterait à faire une table et une vue associée reprennant les mêmes colonnes.
    Illustration :
    table_donnees(col1, col2, col3)
    view_donnees => CREATE OR REPLACE VIEW view_donnees AS SELECT col1, col2, col3 FROM table_donnees

    L'astuce consiste alors à définir une règle spéciale sur la vue de la manière suivante :
    CREATE RULE view_donnees_insert AS ON INSERT TO view_donnees DO INSTEAD ... appel au "trigger" ...

    Pour obtenir le comportement que tu souhaites, cela reviendrait donc à :
    - outrepasser le trigger, on insère directement dans table_donnees,
    - utiliser le trigger, on insère dans view_donnees.

    En espérant que ce soit possible ... (ben oui j'ai pas testé !)

    N.B : "trigger" ne doit pas être appelé directement comme cela à mon avis ...

  6. #6
    Membre averti
    Homme Profil pro
    programmeur / analyste
    Inscrit en
    Novembre 2003
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Canada

    Informations professionnelles :
    Activité : programmeur / analyste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2003
    Messages : 41
    Par défaut
    kryskool: ma version est 8.1 par contre si j'ai bien compris, le trigger peux être désactivé avec ALTER TABLE mais, lorsque d'autre requêtes son envoyé en même temps, est-il désactivé pour tous le monde (Il ne faudrais pas)?

    Car mon but à moi est de faire la maintenace de la BD sans entraver le service à la clientel. Sinon, je suis oubligé d'attendre au soir lorsque la BD n'est plus solicité ou pire encore, la fin de semaine.

    emynona: Ton idée mérite d'être testé. Je vais le faire mais j'espère que tu es patient car comme je l'ai dit plus haut, c'est simplement pour moi afin de facilité la maintenance de la BD et surtout d'évité de faire des heures suplémentaire le soir . J'ai donc des projets plus urgent à terminer et c'est pour ça que je recherche une solution simple et rapide.

    Alors, merci beaucoup et continuez à soumettre vos bonnes idées.

    Cheers

Discussions similaires

  1. [power designer et Sybase] trigger
    Par mr_qno dans le forum Sybase
    Réponses: 4
    Dernier message: 12/07/2006, 18h32
  2. Réponses: 1
    Dernier message: 16/03/2006, 17h04
  3. Trigger ??
    Par XDeus dans le forum Développement
    Réponses: 6
    Dernier message: 31/03/2003, 09h44
  4. [PostgreSQL] Refus de STATEMENT dans un trigger
    Par alex2205 dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/03/2003, 12h51
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

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