Como @SpartanElite apontou , você está acionando um loop infinito.
Simplifique a função de gatilho:
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;
- Atribuir a
NEW
diretamente. NãoWHERE
neste caso. - Você deve nomes de colunas ilegais com aspas duplas. É melhor não usar esses nomes para começar.
Recente resposta relacionada. - O código para inserção e atualização é o mesmo. Dobrei em um caminho de código.
Use um
BEFORE
acionar. Dessa forma, você pode editar as colunas da linha de acionamento diretamente antes eles são salvos:CREATE TRIGGER set_angle
BEFORE INSERT OR UPDATE ON annotations
FOR EACH ROW EXECUTE PROCEDURE set_angle();
No entanto
Se você está apenas tentando persistir um valor funcionalmente dependente na tabela (e não há outras considerações):Não . Use uma visualização ou uma coluna gerada:
Então você não precisa de nada disso.