Como señaló @SpartanElite , está desencadenando un bucle sin fin.
Simplifique la función de disparo:
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;
- Asignar a
NEW
directamente. SinWHERE
en este caso. - Usted debe nombres de columnas ilegales entre comillas dobles. Para empezar, es mejor no usar esos nombres.
Recent respuesta relacionada. - El código para insertar y actualizar es el mismo. Doblé en una ruta de código.
Usa un BEFORE
generar. De esta forma, puede editar las columnas de la fila de activación directamente antes se guardan:
CREATE TRIGGER set_angle
BEFORE INSERT OR UPDATE ON annotations
FOR EACH ROW EXECUTE PROCEDURE set_angle();
Sin embargo
Si solo está tratando de conservar un valor funcionalmente dependiente en la tabla (y no hay otras consideraciones):No . Use una vista o una columna generada en su lugar:
Entonces no necesitas nada de esto.