Jak upozornil @SpartanElite , spouštíte nekonečnou smyčku.
Zjednodušte funkci spouštění:
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;
- Přiřadit k
NEW
přímo. ŽádnéWHERE
v tomto případě. - Musíte dvojité uvozovky nelegálních názvů sloupců. Pro začátek je lepší takové názvy nepoužívat.
Nedávné související odpověď. - Kód pro vložení a upgrade je stejný. Složil jsem do jedné kódové cesty.
Použijte BEFORE
spoušť. Tímto způsobem můžete upravit sloupce spouštěcího řádku přímo před jsou uloženy:
CREATE TRIGGER set_angle
BEFORE INSERT OR UPDATE ON annotations
FOR EACH ROW EXECUTE PROCEDURE set_angle();
Nicméně
Pokud pouze se snažíte zachovat funkčně závislou hodnotu v tabulce (a nejsou zde žádné další úvahy):Ne . Místo toho použijte zobrazení nebo vygenerovaný sloupec:
Pak nic z toho nepotřebujete.