From: | Peter Eisentraut <peter_e(at)gmx(dot)net> |
---|---|
To: | pgsql-de-allgemein(at)postgresql(dot)org |
Cc: | udono <udono(at)gmx(dot)net> |
Subject: | Re: Trigger und Funktion |
Date: | 2007-03-08 07:58:52 |
Message-ID: | 200703080858.53194.peter_e@gmx.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-de-allgemein |
udono wrote:
> 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.
Also die offizielle SQL-Lösung wäre hier wohl eine "Assertion", die in
der Art eines Check-Constraints globale Zustände prüfen kann, aber
PostgreSQL bietet das nicht an. Daher muss man hier auf jedem Fall eine
eigene Lösung basteln. Eine Prozedur/Funktion, die das Einfügen
übernimmt, wie von jemandem anders vorgeschlagen, scheint mir auch sehr
sinnvoll.
Es ist außerdem zu beachten, dass keine der von PostgreSQL
implementierten Transaktionsisolationsmodi bei der anstehenden Prüfung
(etwa SELECT sum(amount) FROM acc_trans WHERE trans_id = $var) eine
korrekte Isolation bieten, weswegen die Tabelle mit SHARE ROW EXCLUSIVE
MODE manuell gesperrt werden muss.
--
Peter Eisentraut
http://developer.postgresql.org/~petere/
From | Date | Subject | |
---|---|---|---|
Next Message | A. Kretschmer | 2007-03-08 10:28:05 | Re: Trigger und Funktion |
Previous Message | Matthias Zirngibl | 2007-03-08 07:08:39 | Re: Trigger und Funktion |