Wie @SpartanElite betonte , lösen Sie eine Endlosschleife aus.
Vereinfachen Sie die Triggerfunktion:
CREATE OR REPLACE FUNCTION set_angle()
RETURNS TRIGGER AS
$func$
BEGIN
NEW."rotationAngle" := degrees(
ST_Azimuth(
ST_StartPoint(NEW.the_geom)
, ST_EndPoint(NEW.the_geom)
)
) - 90;
RETURN NEW;
END
$func$ LANGUAGE plpgsql;
- Zuordnen zu
NEWdirekt. KeinWHEREin diesem Fall. - Sie müssen unzulässige Spaltennamen in doppelte Anführungszeichen setzen. Verwenden Sie solche Namen besser erst gar nicht.
Neueste entsprechende Antwort. - Code für Insert &Upgrade ist derselbe. Ich habe in einen Codepfad gefaltet.
Verwenden Sie ein BEFORE Abzug. Auf diese Weise können Sie Spalten der auslösenden Zeile direkt vorher bearbeiten sie werden gespeichert:
CREATE TRIGGER set_angle
BEFORE INSERT OR UPDATE ON annotations
FOR EACH ROW EXECUTE PROCEDURE set_angle(); Allerdings
Wenn Sie versuchen nur, einen funktional abhängigen Wert in der Tabelle beizubehalten (und es gibt keine weiteren Überlegungen):Nicht . Verwenden Sie stattdessen eine Ansicht oder eine generierte Spalte:
Dann brauchen Sie nichts davon.