#1 Tue 25 September 2018 15:43
- BenB
- Participant actif
- Date d'inscription: 29 Dec 2015
- Messages: 121
[PostgreSQL] Trigger mise à jour données
Bonjour,
je réalise un trigger pour remplir automatiquement deux champs d'une table de ponctuel en fonction d'une table de référence
Voici le trigger :
Code:
CREATE OR REPLACE FUNCTION etude_epode.trigger_espece_faune() RETURNS trigger AS $BODY$ BEGIN IF NEW.cd_nom is not null then select r.nom_vern, r.lb_nom from ref_inpn.taxref_faune r where NEW.cd_nom=r.cd_nom into NEW.nom_vernaculaire, NEW.nom_scientifique; END IF ; Return NEW; END $BODY$ LANGUAGE plpgsql VOLATILE COST 100;
et son application sur la table
Code:
CREATE TRIGGER nom_especes BEFORE INSERT OR UPDATE ON etude_epode.observation_faune FOR EACH ROW EXECUTE PROCEDURE etude_epode.trigger_espece_faune();
Donc quand un point est créé et un cd_nom indiqué les colonnes nom_vernaculaire nom_scientifique se complètent correctement
Par contre quand je modifie le cd_nom d'un point existant les colonnes nom_vernaculaire et nom_scientifique ne se mettent pas à jour.
Je rencontre le même problème pour des trigger de surface : la surface ne se met pas à jour quand la géométrie du polygone est modifiée.
Merci pour votre aide;
Bonne journée
Hors ligne
#2 Tue 25 September 2018 17:22
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1159
Re: [PostgreSQL] Trigger mise à jour données
Salut,
dans un premier temps vous pourriez utiliser la commande RAISE
afin de faire des remontées d'erreurs pour essayer de déterminer ce qui cloche.
Hors ligne
#3 Tue 25 September 2018 17:37
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1159
Re: [PostgreSQL] Trigger mise à jour données
Sinon,
je l'ai déjà dit dans des sujets similaires mais
votre cas d'utilisation est typiquement celui d'une vue avec possibilité de mise à jour,
utiliser des triggers dans ce cas étant souvent considérée comme une mauvaise pratique.
http://www.postgresqltutorial.com/postg … ble-views/
Dernière modification par tumasgiu (Tue 25 September 2018 17:45)
Hors ligne
#4 Wed 26 September 2018 16:18
- BenB
- Participant actif
- Date d'inscription: 29 Dec 2015
- Messages: 121
Re: [PostgreSQL] Trigger mise à jour données
Bonjour,
j'utilise déjà des vues dans cette base, mais j'ai vraiment besoin de faire ça directement dans les tables; Car les agents font des modifications et ont besoins de voir ces infos a jours dans la même table attributaire et non dans des vues a part.
Hors ligne
#5 Wed 26 September 2018 19:20
Re: [PostgreSQL] Trigger mise à jour données
BenB, un des principes d'organisation de base de données lorsque l'on commence à y intégrer de la logique métier, est d'organiser sa base comme du code. Une solution pour cela est de n'exposer que des vues éditables aux clients, donc surtout ne pas laisser QGIS accéder directement aux tables.
Les vues éditables avec triggers INSTEAD OF sont beaucoup plus simples à maintenir et gérer dans le temps que des triggers sur des tables.
Hors ligne