GeODin zu PostGIS, aber wie?

Probleme, Fragen die mit der Installation und Anwendung der PostGIS-Erweiterung zu tun haben.
schweitzerili
Benutzer
Beiträge: 56
Registriert: Di 13. Okt 2015, 09:35

Re: GeODin zu PostGIS, aber wie?

Beitrag von schweitzerili » Mi 25. Jan 2017, 16:50

Habe mich nun nochmal durch die ganze Trigger-Thematik durchgearbeitet und bin wesentlich weiter gekommen. Folgende Funktion hat sich bisher ergeben:

Code: Alles auswählen

CREATE OR REPLACE FUNCTION public.insert()
  RETURNS trigger AS
$BODY$
      BEGIN
	IF (TG_OP = 'DELETE') THEN
            DELETE FROM postgis.stammdaten WHERE locid = OLD.locid and xcoord = OLD.xcoord and ycoord = OLD.ycoord;
            RETURN OLD;
        ELSIF (TG_OP = 'UPDATE') THEN
            UPDATE postgis.stammdaten 
            SET locid = NEW.locid, xcoord = NEW.xcoord, ycoord = NEW.ycoord
            FROM public.geodin_loc_ssgkrzt1;
            RETURN NEW;
        ELSIF (TG_OP = 'INSERT') THEN
            INSERT INTO postgis.stammdaten SELECT NEW.locid, NEW.xcoord, NEW.ycoord;    		
		RETURN NULL;
      	END IF;
        RETURN NULL;
      END;
  $BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION public.insert()
  OWNER TO postgres;
Der INSERT und DELETE Teil funktioniert einwandfrei. Der UPDATE-Teil funktioniert leider noch nicht wie gewünscht.
Im Moment passiert folgendes: ich ändere den wert einer Zeile in der Spalte locid per update in der urtabelle (public.geodin_loc_ssgkrzt1).
Daraufhin ändert mir der Trigger alle Werte in allen Zeilen und SPalten in der Zieltabelle auf die Werte der betreffenden Zeile aus der Urtabelle. Irgendwie auch logisch bei dem was ich da geschrieben habe.
Ich tu mich sowieso mit der UPDATE-Funktion etwas schwer und wäre über einen ANstoß was ich ändern muss, damit nur der eine entsprechende Wert in der Zieltabele geupdatet wird, sehr dankbar. Wenn ich das habe, habe ich das gesamte Problem gelöst.

akretschmer
Erfahrener Benutzer
Beiträge: 7480
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: GeODin zu PostGIS, aber wie?

Beitrag von akretschmer » Mi 25. Jan 2017, 17:01

Ja, ich denke mal, ich schenke Dir ein WHERE.
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

schweitzerili
Benutzer
Beiträge: 56
Registriert: Di 13. Okt 2015, 09:35

Re: GeODin zu PostGIS, aber wie?

Beitrag von schweitzerili » Mi 25. Jan 2017, 17:29

So, das WHERE hatte ich schon mal drin, aber an der falschen Stelle und das FROM muss raus... Nun nach 5 Seiten und 42 Beiträgen ist es endlich geschafft xD Falls irgendwann auch mal jemand sowas machen muss hier noch die endgültige Beispielfunktion für einen AFTER Trigger zwischen zwei Schematas für UPDATE, DELETE und INSERT in einem:

Code: Alles auswählen

CREATE OR REPLACE FUNCTION public.insert()
  RETURNS trigger AS
$BODY$
      BEGIN
	IF (TG_OP = 'DELETE') THEN
            DELETE FROM postgis.stammdaten WHERE locid = OLD.locid and xcoord = OLD.xcoord and ycoord = OLD.ycoord;
            RETURN OLD;
        ELSIF (TG_OP = 'UPDATE') THEN
            UPDATE postgis.stammdaten 
            SET locid = NEW.locid, xcoord = NEW.xcoord, ycoord = NEW.ycoord
            WHERE locid = OLD.locid and xcoord = OLD.xcoord and ycoord = OLD.ycoord;
            RETURN NEW;
        ELSIF (TG_OP = 'INSERT') THEN
            INSERT INTO postgis.stammdaten SELECT NEW.locid, NEW.xcoord, NEW.ycoord;    		
		RETURN NULL;
      	END IF;
        RETURN NULL;
      END;
  $BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION public.insert()
  OWNER TO postgres;
  
Danke an euch beide... GISMAN werd ich bestimmt noch wegen der PostGIS-Geometrie nerven, aber das Grundproblem ist gelöst.

Antworten