PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#26 26/01/2012 12:29:56

ioguix
Administrateur

Re : un dernier trigger pour la route

J'imagine que ton trigger se déclenche avant la mise à jour (tout dépend de sa définition), donc si tu modifies les données de NEW, ce sont ces données qui seront in fine dans la table.

Ceci dit, on a tous (plus ou moins) été étudiant avant, avec le stress qui va avec et le manque de temps pour tout gérer. Mais ça n'empêche pas d'apprendre à lire une documentation en prenant son temps pour la comprendre pour éviter de perdre plus de temps ensuite à faire n'importe quoi...

Mes profs fouillaient internet pour comparer nos travaux avec de l'existant. Je te souhaite d'avoir des profs moins pointilleux, à la lecture de ce fil, à leur place je sortirais le colt.

PS: et on ne mord pas une main qui se tend vers toi et tente de t'aider en te pointant la bonne doc. Doc que tu n'avais probablement pas lue.

Hors ligne

#27 26/01/2012 12:38:16

Marc Cousin
Membre

Re : un dernier trigger pour la route

Bon, on va essayer de calmer le thread.

Je pense qu'il y a plusieurs problèmes:

- On a un peu l'impression de faire votre boulot à votre place, depuis quelques posts (vous avez publié un certain nombre de fois du code qui ne marchait pas, ou du code sans commentaire nous disant où est le problème, ce qui nous rend la tâche bien plus pénible, par exemple), je pense que c'est plutôt un problème de forme, mais bon, je pense qu'il vaut mieux laisser tomber sur ce sujet, simplement méfiez-vous, ça peut déclencher de l'hostilité: on a vraiment l'impression que vous postez un code fait à la va-vite, en espérant que quelqu'un va le débugguer pour vous. Je vais faire comme si ce n'était pas le cas dans le reste du post...
- Je pense que la syntaxe NEW n'est pas la bonne (j'explique ça dans les lignes qui suivent) mais vous n'avez pas fait la modif qui montrerait que vous avez essayé sans succès, d'où les messages de flo vous demandant d'au moins essayer.

À mon avis, il vaut mieux récapituler, plutôt que de continuer et que ça continue à dégénérer:

Pour la plupart des triggers qu'on écrit (les triggers sur table, before, for each row), on joue à modifier le record NEW, qui contient l'enregistrement qui a déclenché le trigger. Ou bien, à partir de ce NEW, on réalise des requêtes (rarement sur la table sur laquelle le trigger se déclenche, sinon risque de boucler) qui mettent à jour d'autres tables.

Dans votre cas, on a un trigger INSTEAD OF, sur une vue. Il va donc avoir un objet NEW, mais ça n'a pas de sens de le modifier: il ne va pas être inséré dans la vue de toutes façons. Son contenu doit être traité pour  être inséré dans la/les table(s) sous-jacentes (ou faire n'importe quel traitement …)

Le trigger part en boucle parce qu'évidemment, si vous avez un trigger sur la vue ALLSUJET dans laquelle vous faîtes un  UPDATE ALLSUJET, cet update va à nouveau déclencher le trigger. Commencez donc par faire la mise à jour sur le bon objet (la table…)

Un dernier point, le message avec «voila la version d'hier soir», il nous donne quelle information ? (je présume qu'il part en boucle, mais ça serait bien de nous le dire… si ce n'est pas le cas, les 10 minutes que je viens de passer à écrire ce message sont perdues).


Marc.

Hors ligne

#28 26/01/2012 13:00:30

Morby
Membre

Re : un dernier trigger pour la route

ioguix > c'est peut etre stressant d'etre étudiant à 20 ans, mais passé 40 ça l'est encore plus et digérer un programme universitaire de 2 ans en 6 mois ne simplifie pas la tache, surtout quand on part du zéro absolue. à l'issue de ma formation je ne compte pas faire une carrière de DBA mais plutôt m'orienter vers le développement en Java. J'ai juste besoin de finir ce trigger pour boucler mon projet qui a déjà 2 jours de retard, suite à quoi je ne toucherais surement plus aux bases de données, du moins pas à un niveau aussi complexe. Cela explique mon agacement car je suis plutôt du genre à préférer un petit dessin qu'un long discours.

Marc > merci pour vos explications, notamment concernant le phénomène de boucle, j'avais déjà eu ce cas de figure 1 fois, mais là j'étais complètement passé à coté. concernant les NEW et le non-sens de les modifier, je n'ai malheureusement toujours pas compris la mécanique...
Maintenant le temps me manque, je dois rendre le projet dans 1h, je vais donc le rendre incomplet et serrer les fesses pour avoir une note suffisante qui rattrapera la sale note que j'ai eu sous Oracle

-----------------------

Merci à tous ceux qui ont passé du temps à m'aider, je regrette de ne pas être arrivé au bout malgré vos efforts et les miens

Hors ligne

Pied de page des forums