Jak zauważył @SpartanElite , uruchamiasz nieskończoną pętlę.
Uprość funkcję wyzwalania:
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;
- Przypisz do
NEW
bezpośrednio. NieWHERE
w tym przypadku. - Trze musisz niedozwolone nazwy kolumn w podwójnym cudzysłowie. Na początek lepiej nie używać takich nazw.
Ostatnie powiązana odpowiedź. - Kod do wstawiania i aktualizacji jest taki sam. Złożyłem się w jedną ścieżkę kodu.
Użyj BEFORE
cyngiel. W ten sposób możesz edytować kolumny wiersza wyzwalającego bezpośrednio przed są zapisywane:
CREATE TRIGGER set_angle
BEFORE INSERT OR UPDATE ON annotations
FOR EACH ROW EXECUTE PROCEDURE set_angle();
Jednak
Jeśli po prostu próbujesz utrzymać w tabeli wartość zależną funkcjonalnie (i nie ma innych kwestii):Nie . Zamiast tego użyj widoku lub wygenerowanej kolumny:
Wtedy nie potrzebujesz tego.