/ / Wie aktualisiere ich die Tabelle, wenn die Ansicht aktualisiert wird? - postgresql, postgis

Wie aktualisiert man die Tabelle, wenn die Ansicht aktualisiert wird? - postgresql, postgis

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 № 1

Verwenden 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.