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
NEW
direkt. KeinWHERE
in 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.