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).

#1 Re : Général » Trigger SUM/ GROUP BY postgresql » 20/07/2020 13:50:24

gid    secteur    site    type_surf    surface    code_ent    convention    surface_to
201    ZAC    BEAU SOLEIL NORD    02    233.164802191769            7316
202    ZAC    BEAU SOLEIL NORD    01    150.222470300527            7316
203    ZAC    BEAU SOLEIL NORD    01    181.560618462796            7316
204    ZAC    BEAU SOLEIL NORD    01    100.418935165886            7316
205    ZAC    BEAU SOLEIL NORD    01    111.748459693281            7316
206    ZAC    BEAU SOLEIL NORD    01    56.2034740272345            7316
207    ZAC    BEAU SOLEIL NORD    01    15.8995911087728            7316
208    ZAC    BEAU SOLEIL NORD    01    3533.98304339476            7316
300    ZAC    BEAU SOLEIL NORD    02    2902.80650284431            7316
200    ZAC    BEAU SOLEIL NORD    01    17.3674759944427            7316
348    ZAC    BEAU SOLEIL SUD    02    13440.8542233807            59846
349    ZAC    BEAU SOLEIL SUD    02    5631.21243781833            59846
350    ZAC    BEAU SOLEIL SUD    02    17990.8078116016            59846
351    ZAC    BEAU SOLEIL SUD    02    20049.4232475934            59846
352    ZAC    BEAU SOLEIL SUD    02    2626.74934858792            59846


Je souhaite que si un utilisateur créé une entité sur le site "BEAU SOLEIL NORD" ou supprime un entité, que comme mon champs surface (mis à jour automatiquement), mon calcul de surface_to (qui correspond à la sum des surfaces sur un site) se mette à jour automatiquement afin que tous ce qui en découle (statistique...) se mette à jour directement sans intervention d'un utilisateur.

#2 Re : Général » Trigger SUM/ GROUP BY postgresql » 20/07/2020 12:46:02

Je n'ai effectivement plus d'erreur en préfixant new.site mais il ne me fait quand même pas la surface par site.
Il me renvoi la surface de la nouvelle entité.

De plus j'ai cette fois un nouveau message d'erreur lors de la suppression de l'entité et je suis obligé de rendre inactif le trigger pour supprimer mon entité.
Erreur du fournisseur de données :
      Erreur PostGIS lors de la suppression d'entité : ERREUR:  l'enregistrement « new » n'est pas encore affectée
    DETAIL:  La structure de ligne d'un enregistrement pas encore affecté est indéterminée.
    CONTEXT:  instruction SQL « SELECT SUM(ST_Area(new.geom))group by new.site »
    fonction PL/pgsql pole_technique.calcul_surf_total_site(), ligne 2 à affectation

#3 Re : Général » Trigger SUM/ GROUP BY postgresql » 20/07/2020 12:16:54

Alors je me suis peut être mal exprimé ou j'ai peut être mal construit ma requête mais voilà ce que je veux et ce que j'ai :

J'ai 1 table surfenh dans lequel j'ai des colonnes dont site, surface, surface_par_site...
Je veux que ma colonne surface_par_site me renvoi une surface en fonction du site. Pour un site, j'aurai donc 1 surface_par_site qui se répétera (oui c'est un peu bête peut être). J'ai donc 100 entités qui ont des surfaces différentes, sur 20 sites. J'aurai donc au final sur ma colonne surface_par_site 100 entités mais seulement 20 sommes différentes.

Pour information j'ai déjà testé :
BEGIN
NEW.surface_total:=SUM(ST_Area(new.geom))group by "site";
RETURN NEW;
END;

ou

BEGIN
NEW.surface_total:=SUM(ST_Area(new.geom))group by 'site';
RETURN NEW;
END;

Il me renvoi toujours la même erreur.

#4 Général » Trigger SUM/ GROUP BY postgresql » 20/07/2020 11:51:20

charlene C
Réponses : 8

Je souhaiterais que dans ma base se mette à jour automatique ma colonne surf total par site.

J'ai donc mis en place un trigger fonction :

BEGIN
NEW.surface_total:=SUM(ST_Area(new.geom))group by site;
RETURN NEW;
END;

Puis appliquer mon trigger sur ma couche.

Hors lorsque j’essaie d'ajouter une entité dans ma table sous QGIS et d'enregistrer pour voir le résultat voilà le message d'erreur que j'ai :

Erreur PostGIS lors de l'ajout d'entité : ERREUR:  la colonne « site » n'existe pas
LINE 1: SELECT SUM(ST_Area(new.geom))group by site

Je ne comprend pas car ma colonne site existe bien.

Si vous avez des pistes, je suis preneuse....

Pied de page des forums

Propulsé par FluxBB