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 02/12/2011, 10h12   #1
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2011
Messages : 15
Points : 3
Points : 3
Par défaut [Trigger] Trigger ne se lance pas toujours

Bonjour, j'ai mis en place des Trigger sur mes tables pour connaitre la derniere date ou cette table a été modifié,(insert,update, delete) mais il arrive quelque fois ou le trigger ne s'active pas mais je ne sais pas pourquoi. Il n'y a rien dans le log.

Voila ma fonction trigger :
Code :
1
2
3
4
5
CREATE TRIGGER trig_an
  AFTER INSERT OR UPDATE OR DELETE
  ON animal
  FOR EACH ROW
  EXECUTE PROCEDURE modif_table_an();
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE OR REPLACE FUNCTION modif_table_an()
  RETURNS TRIGGER AS
$BODY$
BEGIN
	UPDATE update_table SET date_update = now()
	WHERE nom_table_modif LIKE 'animal';
	RETURN NULL;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION modif_table_an()
  OWNER TO postgres;
Merci de votre aide.
geof51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 17h39   #2
Modérateur
 
Inscription : octobre 2008
Messages : 1 508
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 508
Points : 2 040
Points : 2 040
Il n'y a rien dans le code de la fonction qui expliquerait le problème.
A quoi se voit le problème d'ailleurs?
Le date_update n'est pas du tout à la bonne heure?
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 11h23   #3
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2011
Messages : 15
Points : 3
Points : 3
Oui la date_update n'est pas du tout à l'heure.
exemple: je fais une modification dans ma table (via hibernate), la modification est bien effectuée dans la table mais date_update n'a pas changé.

Ce problème vient aléatoirement, généralement un coup sur deux.
geof51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 20h42   #4
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
Hibernate est une grosse merde qui génère plus de problème et constitue une boîte opaque dans laquelle il est difficile de savoir ce que cette horreur fait !
Pour vous donner une idée de pourquoi il faut éviter Hibernate et pas mal d'outils de ce genre, lisez cet article :
http://img1.lemondeinformatique.fr/f...s-epaisses.pdf

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 08/12/2011, 14h43   #5
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2011
Messages : 15
Points : 3
Points : 3
Oui je suis d'accord, mais la le trigger est au niveau de postgres et apres l'insert/update, donc peu importe qui fait l'insertion/modif et comment, cela ne devrait pas avoir d'importance non ?
geof51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 14h49   #6
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 648
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 648
Points : 2 644
Points : 2 644
Bonjour,

n'auriez-vous pas des problèmes de lock ?

Si vous transformez ce trigger en trigger before update / insert et que dedans vous faites un set de la NEW.ma_date, avez-vous encore le même problème ?

Code :
1
2
3
4
5
6
7
 
CREATE TABLE t_tst
(
  id integer NOT NULL,
  t_date date,
  CONSTRAINT t_tst_pkey PRIMARY KEY (id )
);
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
CREATE TRIGGER "_BEF_INS_UPD_DEL"
  BEFORE INSERT OR UPDATE OR DELETE
  ON t_tst
  FOR EACH ROW
  EXECUTE PROCEDURE "_INSERT_BEFORE_DATE"();
 
 
CREATE OR REPLACE FUNCTION "_INSERT_BEFORE_DATE"()
  RETURNS TRIGGER AS
$BODY$begin
NEW.t_date = current_date;
RETURN new;
end;$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 17h12   #7
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2011
Messages : 15
Points : 3
Points : 3
Bonjour punkoff,

je n'ai pas compris ce que vous me demandez de faire. Vous voulez que je mette ce trigger before sur la table dont la date est mise à jour ? ou que je change mon trigger actuel en le mettant en before au lieu d'after ?

j'ai essayé ca, mais il me dit que new n'existe pas dans la table update_table.
Code :
1
2
3
4
5
6
 
BEGIN
	UPDATE update_table SET NEW.date_update = now()
	WHERE nom_table_modif LIKE 'animal';
	RETURN new;
END;
Merci.
geof51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 17h30   #8
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 648
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 648
Points : 2 644
Points : 2 644
Bonjour,

Oui, de remplacer votre trigger actuel par l'exemple que je vous ai donné pour voir si vos problèmes persiste avec cette méthode.


Dans votre cas vous updatez une 2eme fois votre ligne juste après le commit (je suppose ?)

Dans le cas d'un trigger before vous allez remplacer la valeur de votre colonne date juste avant l'update.


Dans les 2 cas par contre je penses que votre ORM sera désynchronisé avec la base de donnée .... et si vos problèmes viennent de là...

du coup il faudrait forcer le vidage du ...cache ? (je ne sais plus le therme exacte) afin qu'il récupère les bonnes infos de la base pour l'objet mappé.
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 17h59   #9
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2011
Messages : 15
Points : 3
Points : 3
En remplaçant par before ce n'est pas possible dans le fonctionnement actuel de l'application, plus rien n'est synchro.

Par contre par l'opération du saint esprit je n'arrive plus à reproduire le bug du trigger qui ne se lance pas. Alors je ne sais pas comment j'ai corrigé le problème(enfin qu'il n'apparait plus en tout cas), car j'ai modifié pas mal de choses entre temps sans revérifier ce bug.

Si vous avez une idée d'ou ca pouvait venir je veux bien savoir, des fois que ca revienne.
geof51 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 15h05.


 
 
 
 
Partenaires

Hébergement Web