PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Attivatore di aggiornamento PostgreSQL

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. Nessun WHERE 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.