Servus,
Ich bin gerade am rumdoktern des folgenden Problems:
Flaeche1 hat eine 1:n Beziehung zu Flaeche2.
flaeche1, fl_id <----- flaeche2, fl_fs
1 : n
Nun möchte ich auch sicher stellen, dass dieser Bezug auch räumlich abgebildet wird, das heißt, ich will nur neu erstellte Geometrien in Flaeche2 zulassen, die innerhalb von Flaeche1 liegen, und dabei die 1:n Beziehung berücksichtigt wird.
Bsp: Flaeche2, fl_fs = 1 muss innerhalb der Flaeche1, fl_id = 1 liegen.
Nun hab ich folgenden Trigger geschrieben und weiß nicht, wieso das nicht funktioniert.
CREATE OR REPLACE FUNCTION check_geom()
RETURNS "trigger" AS
$BODY$
BEGIN
IF (SELECT st_within(NEW.geometry, a.geometry) FROM flaeche1 a
WHERE a.fl_id = NEW.fl_fs) <> 1 THEN
RAISE EXCEPTION 'Erstellte Geometrie liegt nicht in der Flaeche1!';
RETURN NEW;
END IF;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION check_geom() OWNER TO postgres;
CREATE TRIGGER trig_check_geom
BEFORE INSERT OR UPDATE
ON flaeche2
FOR EACH ROW
EXECUTE PROCEDURE check_geom();
Beim Einfügen jeglicher Geometrie in die Tabelle Flaeche2 - egal ob innerhalb oder ausserhalb der Flaeche1 - erhalte ich die EXCEPTION.
Weiß jemand, wo es hier ein Problem gibt?
gruß,
Johannes