Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 22/08/2017 15:09:30
- dalivna
- Membre
mise à jour champ automatique
Bonjour,
je me permets de vous solliciter après plusieurs tentatives,
Pour vous expliquer:
J'ai deux tables une intervention et l'autre ouvrage
Un champ id_ouvrage présent dans ma table intervention est renseigné automatiquement via une fonction trigger et un trigger lorsqu'une intervention est saisie sur cet ouvrage.
CREATE OR REPLACE FUNCTION public.id_equipt()
RETURNS trigger AS
$BODY$DECLARE
BEGIN
IF TG_OP = 'INSERT' or TG_OP = 'UPDATE' THEN
update public.intervention set id_ouvrage = public.ouvrage.id_ouvrage FROM public.ouvrage where st_intersects(intervention.geom, ouvrage.geom);
END IF;
return NEW;
END$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.id_equipt()
OWNER TO postgres;
CREATE TRIGGER id_equipt
AFTER INSERT OR UPDATE OF geom
ON public.intervention
FOR EACH ROW
EXECUTE PROCEDURE public.id_equipt();
Jusque là tout fonctionne.
Je souhaite maintenant dans un champ nb_intervention contenu dans ma table ouvrage renseigner le nombre d'intervention effectué sur chacun des ouvrages.
Pour cela j'ai effectué une requête SQL simple
UPDATE ouvrage set nb_intervention = (select count(intervention.id_ouvrage) from intervention where st_intersects (ouvrage.geom, intervention.geom));
Cette requête fonctionne lorsque je l'exécute mais je souhaiterai l'automatiser.
Dès qu'une intervention est créé sur un ouvrage le nombre d'intervention augmente automatiquement.
Et là je sèche!
Si l'un d'entre vous peut m'apporter son aide...
Merci d'avance
Hors ligne
#2 22/08/2017 16:30:16
- rjuju
- Administrateur
Re : mise à jour champ automatique
Bonjour,
Pour la première fonction, vous mettez à jour l'intégralité de la table intervention à chaque insertion ou modification. Essayez plutôt de récupérer l'identifiant qui va bien et mettez le à jour pour la ligne uniquement avec un simple
NEW.id_ouvrage := la_valeur ;
Pour votre second problème, vous risquez d'avoir des résultats faux à la moindre exécution concurrente. Avez-vous rencontré des problèmes de performances qui imposent de maintenir un compteur plutôt que calculer la données au besoin ?
Julien.
https://rjuju.github.io/
Hors ligne
#3 23/08/2017 09:02:39
- dalivna
- Membre
Re : mise à jour champ automatique
Merci pour votre réponse.
Il n'y aura pas d'exécution concurrente étant donné qu'une seule personne intervient sur cette base.
J'ai besoin d'afficher en temps réel le nombre d'interventions sur ouvrage pour des consultations de personnes tierces. C'est pourquoi le calcul au besoin n'est pas envisageable ce qui j'en conviens aurait été beaucoup plus simple pour moi étant novice dans les requêtes SQL.
Cependant, je n'utilise peut-être pas la bonne méthode pour arriver à mes fins.
Hors ligne
Pages : 1