URL: https://linuxfr.org/users/pinky/journaux/probl%C3%A8mes-avec-postgresql Title: Problèmes avec POSTGRESQL Authors: pinky Date: 2004年01月25日T20:27:27+01:00 Tags: postgresql Score: 0 J'ai une table en postgresql: test=# select * from transaction order by id; id | amount | balance ----+--------+--------- 1 | 10 | 10 2 | 1 | 11 3 | -4 | 7 BALANCE est la somme commulée de tous les 'AMOUNT' (un peu comme les extraits de compte). J'aimerais que ma table reste correcte (toujours les bonne _BALANCE_ quelque soit mes opérations sur les champs ID ou AMOUNT. Le champ balance peut être un lecture seule. Je vois 2 solutions: 1. Créer une VIEW (RULE) qui utilise la même table mais sans le champ BALANCE risque d'être très lent, car il faut faire un sum pour chaque entrée en lecture ? Si non, y'a t'il une bonne solution avex une vue ? 2. On peut utiliser la table telle quel et la garder consistante avec des TRIGGERS. Mais alors j'ai des problèmes de récursivité à cause des UPDATE. La solution pour le INSERT et DELETE est simple: create or replace function acc_trans_balance() returns trigger as ' begin execute ''update transaction set balance=balance-'' || OLD.amount || '' where id>='' || OLD.id; return NEW; end ' LANGUAGE plpgsql; CREATE TRIGGER acc_trans_balance_trig after DELETE ON transaction FOR EACH ROW EXECUTE PROCEDURE acc_trans_balance(); **Comment faire pour le UPDATE **? 3. Quelle est la meilleure solution: utiliser les vues mais être lent (ma table risque d'avoir pas mal d'entrées) ou utiliser les triggers et risquer de ne plus être constistent. (car une erreur dans une balane se propage, bien qu'on peut être sûr qu'il n'y a pas d'erreur) Je ne suis pas assez doué un PLSQL et TRIGGER pour trouver la réponse. D'avance merci à ceux qui peuvent m'aider.