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 28/05/2007, 17h38   #1
Futur Membre du Club
 
Homme Christian Dumas
programmeur / analyste
Inscription : novembre 2003
Messages : 38
Détails du profil
Informations personnelles :
Nom : Homme Christian Dumas
Âge : 38
Localisation : Canada

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

Informations forums :
Inscription : novembre 2003
Messages : 38
Points : 18
Points : 18
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
mrbungle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2007, 21h25   #2
jnore
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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?
  Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2007, 15h26   #3
Futur Membre du Club
 
Homme Christian Dumas
programmeur / analyste
Inscription : novembre 2003
Messages : 38
Détails du profil
Informations personnelles :
Nom : Homme Christian Dumas
Âge : 38
Localisation : Canada

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

Informations forums :
Inscription : novembre 2003
Messages : 38
Points : 18
Points : 18
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
mrbungle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2007, 22h03   #4
Membre éclairé
 
Inscription : janvier 2005
Messages : 336
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2005
Messages : 336
Points : 353
Points : 353
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.
__________________
Christophe Chauvet (KrysKool)
kryskool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 15h11   #5
Invité de passage
 
Inscription : mai 2007
Messages : 1
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 1
Points : 1
Points : 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 ...
emynona est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 17h29   #6
Futur Membre du Club
 
Homme Christian Dumas
programmeur / analyste
Inscription : novembre 2003
Messages : 38
Détails du profil
Informations personnelles :
Nom : Homme Christian Dumas
Âge : 38
Localisation : Canada

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

Informations forums :
Inscription : novembre 2003
Messages : 38
Points : 18
Points : 18
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
mrbungle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 21h33   #7
Membre éclairé
 
Inscription : janvier 2005
Messages : 336
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2005
Messages : 336
Points : 353
Points : 353
Si le trigger est désactivé par ALTER TABLE alors il l'est pour tout le monde.
__________________
Christophe Chauvet (KrysKool)
kryskool 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 19h48.


 
 
 
 
Partenaires

Hébergement Web