Както @SpartanElite посочи , вие задействате безкраен цикъл.
Опростете функцията за задействане:
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;
- Присвояване на
NEW
директно. НямаWHERE
в този случай. - Вие трябва двойни кавички незаконни имена на колони. По-добре да не използвате такива имена като начало.
Скорошни свързан отговор. - Кодът за вмъкване и надграждане е същият. Сгънах в един кодов път.
Използвайте BEFORE
спусък. По този начин можете да редактирате колони на задействащия ред директно преди те се записват:
CREATE TRIGGER set_angle
BEFORE INSERT OR UPDATE ON annotations
FOR EACH ROW EXECUTE PROCEDURE set_angle();
Въпреки това
Ако просто се опитвате да запазите функционално зависима стойност в таблицата (и няма други съображения):Не . Вместо това използвайте изглед или генерирана колона:
Тогава нямате нужда от нищо от това.