PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Gatilho de atualização do PostgreSQL


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ão WHERE 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.