Trigger nach allen Statements feuern?

Servus,

Das ganze ist mal wieder ein PostGIS-Thema, aber bezieht sich eher auf trigger allgemein.

Ich hab einen Trigger, der die Konsistenz der Daten überprüft (BEFORE insert/update und FOR EACH ROW). Funktioniert gut.
Bei dem Fall, dass zwei Objekte der Tabelle geändert werden, die einen räumlichen Zusammenhang (in Form eines gleichen Vertex) haben, gibts aber Probleme.
Bsp:

POLYGON 1 ((1 2, 2 3, [color="Red"]3 1[/color], 1 2)) POLYGON 2 (([color="Red"]3 1[/color], 5 1, 5 2, [color="Red"]3 1[/color]))

Die Polygone haben also den Vertex (3 1) “gemeinsam”. Wenn ich also jetzt den Punkt (3 1) auf (3 2) in einem grafischen Client ändern will (und dabei dieser Zusammenhang berücksichtigt wird), sieht dann das beim Speichern folgende UPDATE so aus:

UPDATE test
set geometry = st_geomfromtext('POLYGON((1 2,
2 3, [color="Red"]3 2[/color], 1 2))') where id = 1;
UPDATE test
set geometry = st_geomfromtext('(([color="Red"]3 2[/color], 5 1, 5 2, [color="Red"]3 2[/color])) ') where id = 2;

Der Trigger überprüft aber pro Zeile, das heisst, nach dem ersten Update ist die Tabelle inkonsistent und das ganze wird abgeblasen. Die Tabelle würde erst in Zusammenhang mit dem zweiten Update wieder konsistent werden.

Ist es möglich, einen Trigger so einzurichten, dass er erst nach allen INSERT/UPDATE-Statements feuert? Ich hab dazu nix gefunden.

der Triggercode:

CREATE OR REPLACE FUNCTION best_check_geom()
RETURNS "trigger" AS
$BODY$
BEGIN

IF (SELECT count(*) FROM massnahmen a WHERE ST_Overlaps(NEW.geometry,a.geometry) > 0 THEN
	RAISE EXCEPTION 'Neue Geometrie überlappt eine vorhandene Geometrie!';
ELSE
	RETURN NEW;
END IF;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER;
ALTER FUNCTION best_check_geom() OWNER TO postgres;

CREATE TRIGGER trig_check_geom BEFORE INSERT OR UPDATE ON bestaende
FOR EACH ROW EXECUTE PROCEDURE best_check_geom();

Was du suchst, wäre ein ON COMMIT Trigger. Und nein, den gibt es nicht.

Leider …