From: | "A(dot) Kretschmer" <andreas(dot)kretschmer(at)schollglas(dot)com> |
---|---|
To: | pgsql-de-allgemein(at)postgresql(dot)org |
Subject: | Re: Trigger und Funktion |
Date: | 2007-03-08 06:17:27 |
Message-ID: | 20070308061727.GA5998@a-kretschmer.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-de-allgemein |
am Wed, dem 07.03.2007, um 23:05:24 +0100 mailte udono folgendes:
> Hallo Liste,
>
> hab mal wieder ein Problem, das meinen Horizont etwas überschreitet.
>
> In einer OS Buchhaltung mit Postgresanbindung würde ich gerne etwas
> mehr Verantwortung für die Datenintegrität auf die Datenbank übertragen.
>
> Ich habe eine Tabelle acc_trans, die alle im System gebuchten
> Beträge beinhaltet. Jeder Buchungssatz besteht aus verschiedenen
> Buchungen mit identischer id und verschiedenen Beträgen.
>
> Tabelle acc_trans:
>
> trans_id | amount | ...
> ----------+------------+----
> 13 | 100.00000 | ...
> 13 | -107.00000 | ...
> 13 | 7.00000 | ...
> 13 | 107.00000 | ...
> 13 | -107.00000 | ...
> 14 | 100.00000 | ...
Das gibt aber hier schon ein Problem...
>
> Die Buchungssätze werden mittels Transaktionen in die Tabelle
> acc_trans gebracht.
>
> 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.
> Wie aber weiss ich vor der Transaktion, das die Summe der
> Teilbuchungen 0 ergibt?
Ist das nicht auch eine Frage der buchhalterischen Logig? Das sind doch
sicherlich jeweils 2 oder mehr Buchungen auf verschiedenen Konten, wo
sichergestellt sein muß, daß entweder alle oder keine erfolgt. Erfolgen
alle Buchungen, so ist automatisch alles richtig, oder versteh ich da
was flasch?
Wenn dem so ist, so bietet doch die 'Schutzhülle' der Transaktion über
alle nötigen Buchungen doch die Sicherheit, die Du suchst.
> Mit bspw. SELECT sum(amount) WHERE trans_id = 13 kann ich ja noch
> nicht arbeiten, weil die Transaktion noch nicht commitet wurde und
> ja auch vorher geprüft werden soll.
> (Es stehen PL/pgSQL und PL/Perl zur Verfügung)
>
> Vielleicht hat jemand von euch einen Tip?!
Wenn Deine Applikation weiß, daß alle Buchungen zwar getätigt, aber noch
nicht COMMITed wurden, kann sie ja eine Funktion aufrufen, die das
durchrechnet. In der DB selbst sehe ich keine echte Chance zu erkennen,
ob alle Buchungen erfolgt sind und ein COMMIT unmittelbar bevorsteht.
Wie gesagt, ein ON COMMIT - Trigger wäre nett...
Andreas
--
Andreas Kretschmer
Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header)
GnuPG-ID: 0x3FFF606C, privat 0x7F4584DA http://wwwkeys.de.pgp.net
From | Date | Subject | |
---|---|---|---|
Next Message | Jürgen E. Fischer | 2007-03-08 06:46:05 | Re: Trigger und Funktion |
Previous Message | udono | 2007-03-07 22:05:24 | Trigger und Funktion |