Som @SpartanElite påpegede , udløser du en endeløs løkke.
Forenkle triggerfunktionen:
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;
- Tildel til
NEW
direkte. IngenWHERE
i dette tilfælde. - Du skal ulovlige kolonnenavne med dobbelte anførselstegn. Bedre ikke at bruge sådanne navne til at begynde med.
Seneste relateret svar. - Kode til indsættelse og opgradering er den samme. Jeg foldede ind i én kodesti.
Brug en BEFORE
udløser. På denne måde kan du redigere kolonner i den udløsende række direkte før de er gemt:
CREATE TRIGGER set_angle
BEFORE INSERT OR UPDATE ON annotations
FOR EACH ROW EXECUTE PROCEDURE set_angle();
Men
Hvis du forsøger bare at fastholde en funktionelt afhængig værdi i tabellen (og der er ingen andre overvejelser):Lad være med . Brug en visning eller en genereret kolonne i stedet:
Så behøver du ikke noget af dette.