Skip site navigation (1) Skip section navigation (2)

Re: Trigger und Funktion

From: Andreas Seltenreich <andreas+pg(at)gate450(dot)dyndns(dot)org>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Re: Trigger und Funktion
Date: 2007-03-08 12:20:24
Message-ID: 87hcswsz93.fsf@gate450.dyndns.org (view raw or flat)
Thread:
Lists: pgsql-de-allgemein
A. Kretschmer writes:

> am  Wed, dem 07.03.2007, um 23:05:24 +0100 mailte udono folgendes:
>> Es soll die Regel gelten, dass nur Buchungssätze in die Tabelle 
>> acc_trans dürfen (UPDATE, INSERT), deren Summe der Einzelbeträge 
>> (amount) aller Teilbuchungen (trans_id) 0 ergibt.
>
>
> IMHO wäre hier ein ON COMMIT TRIGGER sinnvoll. Haben wir leider nicht.

Hm, wenn man das "It is not intended for general use" in der Doku zu
"create constraint trigger" überliest, kann man damit scheinbar den
gewünschten Effekt erzielen:

--8<---------------cut here---------------start------------->8---
create table acc_trans(trans_id int, amount numeric);

create function check_balance() returns trigger as $$
       begin

       if tg_op = 'DELETE' or tg_op = 'UPDATE' then
              if (select sum(amount) from acc_trans
	      	 	 	     where trans_id = old.trans_id)
		  <> 0 then
		  	   raise exception 'invalid balance';
	          end if;
       end if;

       if tg_op = 'INSERT' or tg_op = 'UPDATE' then
              if (select sum(amount) from acc_trans
	      	 	 	     where trans_id = new.trans_id)
		  <> 0 then
		  	   raise exception 'invalid balance';
	          end if;
       end if;

       return new;
       end
$$ language 'plpgsql';

create constraint trigger check_balance
       after update or insert or delete
       on acc_trans initially deferred
       for each row execute procedure check_balance();
--8<---------------cut here---------------end--------------->8---

Gruß
Andreas

In response to

Responses

pgsql-de-allgemein by date

Next:From: Jürgen E. FischerDate: 2007-03-08 12:24:42
Subject: Re: Trigger und Funktion
Previous:From: Andreas KretschmerDate: 2007-03-08 12:13:22
Subject: Re: Trigger und Funktion

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group