Ich möchte die Tabelle aktualisieren, wenn ihre Ansicht aktualisiert wird. Ich benutze postgresql / postgis.
Ich erschaffe Sicht.
CREATE VIEW filedata_view
AS SELECT num, id, ST_TRANSFORM(the_geom,900913)
FROM filedata
Und jetzt, wenn es aktualisiert wird, möchte ich TABLE mit diesen Daten aktualisieren. Aber ich habe gehört, dass Trigger nicht in VIEW puted werden können. Wie mache ich das?
Jetzt benutze ich diese Funktion
CREATE OR REPLACE FUNCTION update_table() RETURNS TRIGGER AS "
BEGIN
UPDATE filedata SET id=NEW.id, the_geom=ST_TRANSFORM(NEW.st_transform,70066) where num=NEW.num ;
END;
" LANGUAGE plpgsql;
Das ist gut. Aber ein anderes Problem. Wie man Trigger hinzufügt, um anzuzeigen, mache ich das
CREATE TRIGGER up_table AFTER UPDATE ON filedata_view
FOR EACH ROW EXECUTE PROCEDURE update_table ();
aber bekomme fehler
ERROR: "filedata_view" is not a table.
AKTUALISIEREN
So legen Sie den Spaltennamen fest AS SELECT num, id, ST_TRANSFORM(the_geom,900913)
Wenn ich dies benutze, erhalte ich Spalten: num
,id
und st_transform
. So setzen Sie den Namen der dritten Spalte auf the_geom
?
Antworten:
6 für die Antwort № 1Verwenden Sie für PostgreSQL 9.1 und höher a DO INSTEAD auslösen auf den blick. View-Trigger sind viel weniger schwierig zu finden und weniger anfällig für seltsame Probleme bei der Mehrfachauswertung usw.
Für PostgreSQL 9.0 und niedriger sollten Sie das verwenden Regelsystem - sehen REGEL ERSTELLEN ... STATT TUN. Es ist im Allgemeinen besser, auf 9.1 zu aktualisieren und einen Ansichtstrigger zu verwenden, wenn dies möglich ist, insbesondere für neue Benutzer. Regeln sind knifflige Dinge.