Zoals @SpartanElite opmerkte , activeer je een eindeloze lus.
Vereenvoudig de triggerfunctie:
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;
- Toewijzen aan
NEW
direct. GeenWHERE
in dit geval. - Je moet dubbele aanhalingstekens illegale kolomnamen. Het is beter om zulke namen niet te gebruiken.
Recent gerelateerd antwoord. - Code voor invoegen en upgraden is hetzelfde. Ik vouwde in één codepad.
Gebruik een BEFORE
trekker. Op deze manier kunt u de kolommen van de activerende rij direct voor . bewerken ze zijn opgeslagen:
CREATE TRIGGER set_angle
BEFORE INSERT OR UPDATE ON annotations
FOR EACH ROW EXECUTE PROCEDURE set_angle();
Echter
Als je probeert alleen een functioneel afhankelijke waarde in de tabel te behouden (en er zijn geen andere overwegingen):Niet doen . Gebruik in plaats daarvan een weergave of een gegenereerde kolom:
Dan heb je dit allemaal niet nodig.