record "old" is not assigned yet

Ich versuche einen Beleg im cRM mit Postgres zu erstellen. Leider bekomme ich immer wieder diese Fehlermeldung:

record “old” is not assigned yet
the tuple structure of a not-yet-assigned record is indeterminate
PL/pgSQL function “cmb_Trigger_CalcTotal_TrFunc” line 2 at SQL statement

Dies sieht dann so aus:
– Function: “cmbt_Trigger_CalcTotal_TrFunc”()

– DROP FUNCTION “cmbt_Trigger_CalcTotal_TrFunc”();

CREATE OR REPLACE FUNCTION “cmbt_Trigger_CalcTotal_TrFunc”()
RETURNS “trigger” AS
$BODY$BEGIN
UPDATE “BELEGE” SET “Summe” =
(SELECT SUM(“BELEGPOSTEN”.“PostenSumme”)
FROM “BELEGPOSTEN”
WHERE “BELEGPOSTEN”.“BelegID” = OLD.“BelegID”);
RETURN NULL;
END;$BODY$
LANGUAGE ‘plpgsql’ VOLATILE;
ALTER FUNCTION “cmbt_Trigger_CalcTotal_TrFunc”() OWNER TO postgres;


Was für ein Problem hat er mit dem OLD?

Diese Funktion ist von combit direkt erstellt worden. Ich bin noch nicht besonders fit mit Postgres. Eigentlich sollte das ohne Probleme funktionieren. Es handelt sich ja um die Standardinstallation mit Postgres 8.2.

Ich habe die Funktion jetzt noch einmal im pgAdmin ausgeführt,

statt OLD. mit NEW.

und jetzt scheint es zu funktionieren!

Eine Erklärung habe ich leider nicht. Was genau ist New.?

Leider doch nicht!

Er aktualisiert nicht den gewünschten Datensatz, sondern alle :frowning:

Hat einer von euch eine Idee?

Wäre

BEGIN
UPDATE “BELEGE” SET “Summe” =
(SELECT SUM(“BELEGPOSTEN”.“PostenSumme”)
FROM “BELEGPOSTEN”
WHERE “BELEGPOSTEN”.“BelegID” = “BELEGE”.“ID”);

richtig?

Wie sieht deine Trigger Definition aus?

Dies und anderes erklärt die Doku.

PostgreSQL: Documentation: Manuals: PostgreSQL 8.2: Overview of Trigger Behavior

For a row-level trigger, the input data also includes the NEW row for INSERT and UPDATE triggers, and/or the OLD row for UPDATE and DELETE triggers.

Andreas