Re: Some additional PostgreSQL questions

Поиск
Список
Период
Сортировка
От schaefer@alphanet.ch
Тема Re: Some additional PostgreSQL questions
Дата
Msg-id Pine.LNX.3.96.1020528092524.15151A-100000@defian.alphanet.ch
обсуждение исходный текст
Ответ на Some additional PostgreSQL questions  (Marc SCHAEFER <alphanet-postgresql-sql@alphanet.ch>)
Ответы Re: Some additional PostgreSQL questions  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-sql
On Mon, 27 May 2002, Marc SCHAEFER wrote:

> > compta=> DELETE FROM ecriture WHERE id = 1;
> > DELETE 0
> 
> > The funny thing is the DELETE not saying an error, but not deleting (which
> > is good, but I would like an error).
> 
> Then make your trigger raise an error.  Returning NULL out of the

It does:

CREATE TRIGGER t_ecriture_balance_insert  AFTER INSERT OR UPDATE OR DELETE  ON ecriture  FOR EACH ROW  EXECUTE
PROCEDUREf_ecriture_balance_check ();
 

CREATE FUNCTION f_ecriture_balance_check ()  RETURNS opaque  AS 'DECLARE amount NUMERIC(10, 2);      BEGIN
amount:= 0;         SELECT SUM(montant_signe)            FROM ecriture            WHERE (lot = NEW.lot)         INTO
amount;
         IF (amount != 0) THEN            RAISE EXCEPTION ''Sum of ecritures in lot % is not zero but %'',
             NEW.lot,                            amount;         END IF;
 
         RETURN new;      END;'  LANGUAGE 'plpgsql';

which works, at least in some cases:

compta=> UPDATE ecriture SET montant_signe = -249 WHERE id = 1;
ERROR:  Sum of ecritures in lot 1 is not zero but 1.00
compta=> UPDATE ecriture SET montant_signe = -250 WHERE id = 1;
UPDATE 1
compta=> DELETE FROM ecriture WHERE id = 1;
DELETE 0

now, removing an ecriture should make the balance unbalanced, and as it's
run AFTER should detect the problem, no ?

I tried to modify it slightly so to use OLD instead of NEW:

CREATE TRIGGER t_ecriture_balance_delete  AFTER DELETE  ON ecriture  FOR EACH ROW  EXECUTE PROCEDURE
f_ecriture_balance_check_delete();
 

however it wasn't better.

PS: the second problem is solved thanks to your help, including   my initial problem (question 3) where two transaction
ina session   would fail.
 

PS/2: I am now using 7.2.1.




В списке pgsql-sql по дате отправления:

Предыдущее
От: Stephan Szabo
Дата:
Сообщение: Re: Triggers and System Tables.
Следующее
От: Jan Wieck
Дата:
Сообщение: Re: Triggers and System Tables.