Come @SpartanElite ha sottolineato , stai attivando un ciclo infinito.
Semplifica la funzione di attivazione:
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;
- Assegna a
NEW
direttamente. NessunWHERE
in questo caso. - Devi devi virgolette doppie nomi di colonne non valide. Meglio non usare nomi simili per cominciare.
Recenti risposta correlata. - Il codice per l'inserimento e l'aggiornamento è lo stesso. Ho piegato in un percorso di codice.
Usa un BEFORE
grilletto. In questo modo puoi modificare le colonne della riga di attivazione direttamente prima vengono salvati:
CREATE TRIGGER set_angle
BEFORE INSERT OR UPDATE ON annotations
FOR EACH ROW EXECUTE PROCEDURE set_angle();
Comunque
Se stai solo cercando di mantenere un valore funzionalmente dipendente nella tabella (e non ci sono altre considerazioni):Non . Utilizza invece una vista o una colonna generata:
Allora non ti serve niente di tutto questo.