Som @SpartanElite påpekade , utlöser du en oändlig loop.
Förenkla 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;
- Tilldela till
NEW
direkt. IngenWHERE
i det här fallet. - Du måste olagliga kolumnnamn med dubbla citattecken. Bättre att inte använda sådana namn till att börja med.
Senaste relaterat svar. - Koden för infogning och uppgradering är densamma. Jag vek till en kodsökväg.
Använd en BEFORE
utlösare. På så sätt kan du redigera kolumner i den utlösande raden direkt före de sparas:
CREATE TRIGGER set_angle
BEFORE INSERT OR UPDATE ON annotations
FOR EACH ROW EXECUTE PROCEDURE set_angle();
Men
Om du försöker bara behålla ett funktionellt beroende värde i tabellen (och det finns inga andra överväganden):Gör inte . Använd en vy eller en genererad kolumn istället:
Då behöver du inget av detta.